次の male_trips は大きな pandas データ フレームで、stations は小さな pandas データ フレームです。ステーション ID ごとに、男性の乗車回数を知りたいです。以下は仕事をしますが、長い時間がかかります:
mc = [ sum( male_trips['start_station_id'] == id ) for id in stations['id'] ]
代わりにどうすればいいですか?
アップデート!そのため、2 つの主なアプローチがありました。groupby()
次にsize()
と、より単純な.value_counts()
です。私は簡単timeit
に を実行しましたが、groupby
アプローチはかなりの差で勝ちました! コードは次のとおりです。
from timeit import Timer
setup = "import pandas; male_trips=pandas.load('maletrips')"
a = "male_trips.start_station_id.value_counts()"
b = "male_trips.groupby('start_station_id').size()"
Timer(a,setup).timeit(100)
Timer(b,setup).timeit(100)
結果は次のとおりです。
In [4]: Timer(a,setup).timeit(100) # <- this is value_counts
Out[4]: 9.709594964981079
In [5]: Timer(b,setup).timeit(100) # <- this is groupby / size
Out[5]: 1.5574288368225098
この速度では、value_counts と入力するデータ探索のほうがわずかに速く、覚える必要がないことに注意してください。