PythonのPandasのgroupby・aggでのデータ集計方法

Python,イメージ

AI実装検定のご案内

Pandasの groupbyagg は、データ分析で最もよく使われる強力な集計手法です。

特に大量のデータをカテゴリー別にまとめて統計値を算出する場面で大活躍します。

ここでは基礎から実践的なテクニックまで、できるだけ詳しく解説します。

目次

基本の流れ

Pandasでの典型的な集計手順は以下のようになります。

df.groupby("列名").agg(集計方法)

※このコード単体では、出力はできません。

つまり、

  • groupby で「どの列を基準にグループ化するか」を指定
  • agg で「各グループに対してどんな計算を行うか」を指定

シンプルな例

データ例

import pandas as pd

data = {
    "部署": ["営業", "営業", "開発", "開発", "総務", "営業", "総務"],
    "社員": ["A", "B", "C", "D", "E", "F", "G"],
    "売上": [100, 200, 150, 120, 90, 300, 50],
    "残業時間": [10, 5, 20, 15, 2, 7, 1]
}

df = pd.DataFrame(data)
print(df)

部署ごとの売上合計

df.groupby("部署")["売上"].sum()

複数列を集計する

agg を使うと、1つの列に対して複数の集計関数を適用できます。

df.groupby("部署")["売上"].agg(["sum", "mean", "max"])

複数列を同時に集計

列ごとに違う関数を適用することも可能です。

df.groupby("部署").agg({
    "売上": ["sum", "mean"],
    "残業時間": ["mean", "max"]
})

集計結果にカスタム関数を使う

例えば「残業効率 = 売上 ÷ 残業時間」を計算したい場合。

df.groupby("部署").apply(lambda g: g["売上"].sum() / g["残業時間"].sum())

グループ化を複数キーで行う

部署と社員の両方でグループ化も可能です。

df.groupby(["部署", "社員"])["売上"].sum()

インデックスをフラットにする

groupbyの結果は階層化されやすいですが、reset_index を使ってフラットにできます。

df.groupby("部署", as_index=False).agg({"売上": "sum", "残業時間": "mean"})

よく使われる集計関数

  • sum():合計
  • mean():平均
  • max() / min():最大・最小
  • count():件数
  • nunique():ユニーク数
  • median():中央値
  • std():標準偏差
  • first() / last():最初・最後の値

実務での活用例

  • 売上データ → 商品カテゴリ別の売上合計・平均
  • アクセスログ → ユーザーごとのアクセス回数、平均滞在時間
  • 製造データ → ライン別の不良率
  • マーケティング分析 → 広告キャンペーンごとのCPA(顧客獲得単価)

まとめ

  • groupby は「どうグループ化するか」を指定
  • agg は「グループごとにどんな集計を行うか」を指定
  • 複数列・複数関数・カスタム関数も利用可能
  • 実務でも売上・アクセス解析・製造分析など幅広く活用できる

以上、PythonのPandasのgroupby・aggでのデータ集計方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次