
Pythonでデータ分析や集計処理をする上で、頻繁に使われるのが pandas の groupby()
メソッドです。
この記事では .groupby()
の基本的な使い方から、活用シーン、他の集計系メソッドとの違いまでわかりやすく解説します。
.groupby() とは?
.groupby()
は、データを特定の列(カテゴリ)でグループ分けし、それに対して平均、合計、件数などの統計処理を行うためのメソッドです。
SQLの GROUP BY
に似た機能を持ち、集計や傾向分析を行いたいときに非常に便利です。
基本的な使い方(列ごとに平均を求める)
まず列ごとの平均を求める基本的な使い方を確認しましょう!
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd df = pd.DataFrame({ "部門": ["営業", "営業", "人事", "人事", "技術"], "売上": [100, 150, 80, 60, 120] }) grouped = df.groupby("部門").mean() print(grouped) |
このコードでやっていることは下記です。
部門
列でグループ化- 各部門ごとに
売上
の平均を算出 - 結果は新しい DataFrame として出力
1 2 3 4 5 |
売上 部門 人事 70.0 営業 125.0 技術 120.0 |
.groupby()
箱のような形で使います。
具体例:複数列で集計(件数・合計など)
1 2 3 4 5 6 7 8 9 10 11 12 |
df = pd.DataFrame({ "部門": ["営業", "営業", "人事", "人事", "技術"], "担当者": ["A", "B", "C", "D", "E"], "売上": [100, 150, 80, 60, 120] }) # 件数カウント print(df.groupby("部門").count()) # 合計 print(df.groupby("部門")["売上"].sum()) |
sum()
や count()
、max()
、min()
などの集計関数を後ろに . でチェーンのように繋げていくのが基本スタイルです。
df.groupby() の主な引数
df.groupby()
には多くのオプション引数があり、データの集計方法や出力形式を柔軟に制御できます。
特に as_index、group_keys は使い方を誤解しやすいので、具体例とともに解説します。
引数名 | 役割 | 例 |
---|---|---|
by | グループ化の基準となる列、リスト、または関数 | "部門" または ["部門", "担当者"] |
axis | グループ化の方向(行=0、列=1) | 通常は0 |
level | マルチインデックス時に使う階層の指定 | level=0 |
as_index | 結果をインデックスにするか否か | as_index=False |
sort | グループキーをソートするか否か | sort=False で並び順維持 |
group_keys | グループ名を結果に含めるかどうか | group_keys=False |
dropna | NAのグループを無視するかどうか(pandas 1.1以降) | dropna=False |
observed | category型に対する最適化(パフォーマンス目的) | observed=True |
具体例:as_index=False を使う
デフォルトではグループキーがインデックスになりますが、as_index=False
を指定すると、列として保持されます。
1 2 3 4 5 6 7 |
df = pd.DataFrame({ "部門": ["営業", "営業", "人事", "人事"], "売上": [100, 150, 80, 60] }) print(df.groupby("部門", as_index=False)["売上"].sum()) |
下記の結果となり、 "部門"
列がそのまま残るため、SQLの GROUP BY 結果に近い形式になります。
1 2 3 |
部門 売上 0 人事 140 1 営業 250 |
as_index=False
を指定しない場合は下記結果となり、部門がインデックスとなります。
1 2 3 4 |
部門 人事 140 営業 250 Name: 売上, dtype: int64 |
活用シーン
groupby()
はデータ分析や前処理の中核を担う機能で、あらゆる分野のデータ処理で活用されています。
- 売上データを支店や担当者ごとに集計
- ログデータを日付やユーザーごとにグループ化
- アンケート結果を属性(性別、年齢など)ごとに分析
- 商品カテゴリ別の販売件数や平均金額の算出
このように、groupby()
は単なる集計だけでなく、ビジネスの意思決定やデータサイエンスの基盤を支える重要なメソッドです。
注意点
groupby()
はとても便利ですが、下記注意点には留意しておきましょう。
groupby()
の戻り値は特殊なオブジェクト(GroupByオブジェクト)なので、そのままでは使えない- 集計関数(mean, sum, count など)を必ず後ろにつけて結果を得る
as_index=False
を指定しないと、結果のグループキーがインデックスになってしまう(使いにくいことも)
1 2 |
df.groupby("部門", as_index=False)["売上"].sum() |
as_index=False
を指定すると、元の列として扱いやすくなります。
まとめ
df.groupby()
は pandas におけるデータ分析の要ともいえるメソッドです。
df.groupby()
は、列ごとにデータをグループ分けして集計処理を行うための基本メソッド- 集計関数(mean, sum, count など)と組み合わせて使う
- 複数列でのグループ化や、インデックス制御も可能
- データ分析や前処理、ダッシュボード構築にも頻出
pivot_table()
など他の集計メソッドとの違いも理解して使い分けよう
df.groupby()
を使いこなせると、データ分析の幅が大きく広がります。
数値の要約や傾向の可視化、さらにはモデル入力用の特徴量設計にも応用できるので、ぜひ手を動かしながら習得してみましょう。