パンダ:ものを数える 質問する

パンダ:ものを数える 質問する

以下では、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 はわずかに高速で、記憶する必要も少なくなります。

ベストアンサー1

私は Vishal と同じように、sum() を使用する代わりに size() を使用して、'start_station_id' の各グループに割り当てられた行の数を取得します。つまり、次のようになります。

df = male_trips.groupby('start_station_id').size()

おすすめ記事