本文へスキップ
BecomeCoder

Pythonデータ分析コース · 第4章 pandas ― 集計と加工 · レッスン15

グループ集計 ― groupby

ブラウザで完結

導入

「部署ごとの平均給与」「商品カテゴリごとの売上合計」――カテゴリ別にまとめて集計するのが 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()

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、numpy・pandas・matplotlib が使える本物のPython(Pyodide)で出力とグラフが表示されます。初回だけ読み込みに少し時間がかかります。本文の例をそのまま試したり、書き換えたりしてみましょう(グラフ内の文字は日本語だと表示が崩れるため英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。