「groupby」を取り巻く中核キーワード群です。 検索やインデックス作成で参照する際の手がかりにしてください。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になります。
最も忙しい読者のために、 まず結論だけまとめます。 詳細は以下のセクションへ:
GROUP BY / pandas:df.groupby('col') / R:group_by()。sum, mean, count, min, max, std, nunique, カスタム関数。「都道府県ごとの平均出生率は?」 「商品カテゴリ別の売上は?」 「曜日別アクセス数は?」 — 「Xごとの Y」を計算したくなった瞬間が groupby の出番。
このページの読み方:まず 30秒結論 と 直感 を読み、 必要に応じて 数式 や 計算例、 落とし穴 に進んでください。
クラス全員のテスト結果を「男女別」 「学年別」に平均したい — それが groupby。
SQL でも pandas でもこの 3 ステップは同じ。 内部の最適化が異なるだけです。
形式的に書くと、 関数 $f$ を各グループに適用する操作:
['region', 'year']SSDSE-B の都道府県データで地域別の平均 TFR を計算:
| 地域 | 都道府県数 | 平均 TFR |
|---|---|---|
| 関東 | 7 | 1.18 |
| 関西 | 6 | 1.26 |
| 九州 | 8 | 1.51 |
※ 値は説明用の例示
最小再現コード。 SSDSE-B のような実データを前提に、 4〜8 行で動く例です:
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=1)
# 地域別の平均と標準偏差
result = df.groupby('地域')['合計特殊出生率'].agg(['mean', 'std', 'count'])
print(result)
# 元の行数のまま地域平均を列に追加
df['region_mean'] = df.groupby('地域')['合計特殊出生率'].transform('mean')
補足:ライブラリのバージョンや前処理状態によって出力は変わります。 自分の環境で動かすときは pip list でバージョンを確認し、 入力 CSV のパス・列名を実態に合わせてください。
groupby を実務で扱うとき、 多くの分析者が同じところでつまずきます。 代表的な失敗パターンを先回りで押さえておくと、 後工程のトラブルを大幅に減らせます。
sort=False で高速化。reset_index() で平坦化を忘れずに。count() は非 NULL 数、 size() は行数(NULL 含む)。 用途で使い分け。※ 上記は文献調査・現場経験で報告される頻度の高い注意点。 ドメインや手法のバージョンによって追加の落とし穴がある場合があります。
groupby は「データ処理」分野の中で発展してきた概念・手法です。 学術的には継続的な研究で精緻化され、 実務的にはツール・ライブラリの普及で誰でも使えるようになってきました。 用語の使い方・意味は時代と分野で少しずつ変わるため、 文脈に応じた解釈が大切です。 入門書だけでなく、 標準的な教科書(例:データサイエンス・統計学の定本)や信頼できるオンライン教材も併用すると、 ぶれない理解に近づけます。
「groupby」は単独で完結する概念ではなく、 より大きな分野の一部です。 上位カテゴリの教材を読むことで、 この用語の 位置づけ が立体的に見えてきます: