pandas入門 DataFrameをgroupbyで集計する

私が実務でよく使うものの1つがgroupbyで、例えば商品カテゴリー毎に合計やばらつきを確認したい場合などが挙げられます。無論、SQLでも同様のことは大抵できてしまいますが、例えば形態素解析した結果の単語ごとの集計を書けたい場合などPythonで一気通貫でやる場合にはpandasを使うのが便利ですね。

groupby

その名の通りDataFrameをgroupbyで集計します。groupbyの戻り値で得られるGroupByオブジェクトに対しmean(), min(), max(), sum()などのメソッドを適用すると、グループごとの平均、最小値、最大値、合計などの統計量を算出することが可能です。使い方は簡単ですので、サンプルを見てみましょう。カテゴリーとタグ毎になんらかの量が設定されているDataFrameに対し、集計をかけてみます。引数に集計対象の列名を設定します。複数でgroupbyを書けたい場合はリストで設定します。

df = pd.DataFrame([['cate1', 'tag1', 150],['cate1', 'tag2', 210],['cate2', 'tag2', 80],['cate2', 'tag1', 310], ], columns=['category', 'tag', 'value'])

#   category   tag  value
# 0    cate1  tag1    150
# 1    cate1  tag2    210
# 2    cate2  tag2     80
# 3    cate2  tag1    310

# categoryごとの合計を算出する
df.groupby('category').sum()

#           value
# category       
# cate1       360
# cate2       390

# category、tagごとの件数を算出する

df.groupby(['category', 'tag']).count()
#                value
# category tag        
# cate1    tag1      1
#          tag2      1
# cate2    tag1      1
#          tag2      1

# tagごとのばらつきを算出する

df.groupby(['tag']).std()

#            value
# tag             
# tag1  113.137085
# tag2   91.923882

いかがでしょうか。集計が簡単に使用できますので便利ですね。