導入
「部署ごとの平均給与」「商品カテゴリごとの売上合計」――カテゴリ別にまとめて集計するのが groupby です。pandas でいちばん強力な機能のひとつです。
説明
df.groupby("分類列")["集計列"].mean() の形で、「分類列ごとに、集計列を平均する」と読めます。
import pandas as pd
df = pd.DataFrame({
"team": ["A", "B", "A", "B", "A"],
"score": [80, 60, 90, 70, 100],
})
print(df.groupby("team")["score"].mean()) # チームごとの平均
print(df.groupby("team")["score"].sum()) # チームごとの合計
groupby("team") で A グループと B グループに分け、それぞれの score を平均・合計しています。
.agg() を使えば、複数の集計を一度に出せます。
import pandas as pd
df = pd.DataFrame({
"category": ["food", "book", "food", "toy", "book"],
"price": [300, 1500, 500, 800, 1200],
})
print(df.groupby("category")["price"].agg(["count", "mean", "sum"]))
カテゴリごとに「件数・平均・合計」がそろった表が得られます。売上分析などで大活躍します。
やってみよう
.mean() を .max() に変えて、チームごとの最高点を出しましょう。分類列を増やした表で groupby(["A", "B"]) のように2列でグループ化することもできます。
演習
上の team の表で、チームごとの合計点(sum)を表示してください。
ヒント1を見る
df.groupby("team")["score"].sum()。