pandas
の groupby
と sum
は、データを「グループ化」して「集計」するための非常に重要な機能です。
特にデータ分析やレポート作成の場面で頻繁に使われます。
目次
基本的な考え方
groupby
:指定した列ごとにデータを「グループ」に分ける。sum
:数値の列を「合計」する。
つまり、groupby
は「分類する」役割、sum
は「集計する」役割を持ちます。
この 2 つを組み合わせると「カテゴリごとの売上合計」や「年度ごとの支出合計」などを簡単に求められます。
サンプルデータ
import pandas as pd
# サンプルデータを作成
data = {
'Category': ['A', 'A', 'B', 'B', 'C', 'A'],
'Value1': [10, 20, 30, 40, 50, 60],
'Value2': [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
print("=== 元データ ===")
print(df)
単純にカテゴリごとに合計
print("=== Categoryごとの合計 ===")
result = df.groupby('Category').sum()
print(result)
Category A の場合は 10 + 20 + 60 = 90
などが計算されています。
複数列での groupby
もし複数の列でグループ化したい場合は、リストで渡します。
df.groupby(['Category', 'Value2']).sum()
「カテゴリ × 値2」の組み合わせごとに合計が出せます。
特定の列だけ合計したい場合
デフォルトの .sum()
は数値列すべてを合計します。
列を指定するには次のようにします。
df.groupby('Category')['Value1'].sum()
Value1
のみ合計。
reset_index で見やすくする
groupby
の結果はインデックスにグループ名が入るため、通常の列に戻したい場合は reset_index()
を使います。
df.groupby('Category')['Value1'].sum().reset_index()
他の集計関数との違い
sum()
以外にも、平均 (mean
)、最大値 (max
)、最小値 (min
)、件数 (count
) などを使えます。
また、複数同時に集計するなら agg
を使います:
df.groupby('Category').agg({'Value1': ['sum', 'mean'], 'Value2': 'max'})
実務でのよくある使い方
- 売上データ
「月ごとの売上合計」:df.groupby('Month')['Sales'].sum()
- アクセスログ
「ユーザーごとのアクセス数」:df.groupby('UserID')['AccessCount'].sum()
- 商品分析
「カテゴリごとの在庫数合計」:df.groupby('Category')['Stock'].sum()
まとめ
groupby
は「グループ分け」、sum
は「合計」。df.groupby('列')
→ グループごとに処理。.sum()
は数値列すべてが対象。特定の列は['列']
で指定。- 見やすさのために
reset_index()
を併用することが多い。 - 実務では「売上合計」「件数集計」などに頻繁に活用。
以上、PythonのPandasのgroupbyとsumについてでした。
最後までお読みいただき、ありがとうございました。