
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() を使いこなせると、データ分析の幅が大きく広がります。
数値の要約や傾向の可視化、さらにはモデル入力用の特徴量設計にも応用できるので、ぜひ手を動かしながら習得してみましょう。
