PythonのPandasを使ったデータ集計について、初心者から中級者レベルまで分かりやすく整理して解説します
実務でもよく使う機能なので、例を交えながら詳しくまとめます。
目次
Pandasでのデータ集計の基本
Pandasでは、主に以下の方法でデータを集計します。
groupby()
:カテゴリーごとの集計(SQLのGROUP BYに相当)pivot_table()
:クロス集計表(Excelのピボットテーブルに相当)crosstab()
:クロス集計(2軸の頻度表)- 集約関数(sum, mean, count, max, min など):統計量の算出
groupby()
を使った集計
もっともよく使うのが groupby()
です。
基本構文
df.groupby("列名")["数値列"].集約関数()
※このコード単体では、出力はできません。
例:商品カテゴリごとの売上合計
import pandas as pd
data = {
"カテゴリ": ["A", "A", "B", "B", "C"],
"売上": [100, 200, 300, 400, 500],
"顧客数": [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)
df.groupby("カテゴリ")["売上"].sum()
複数列での集計
groupby()
は複数列でも可能です。
df.groupby(["カテゴリ", "顧客数"])["売上"].sum()
- 「カテゴリ」と「顧客数」の組み合わせごとに売上を合計
- マーケティングでは「性別 × 地域 × 年代ごとの売上」などで応用できます。
複数の集約関数を同時に使う
agg()
を使うと便利です。
df.groupby("カテゴリ").agg({
"売上": ["sum", "mean", "max"],
"顧客数": "count"
})
結果は見やすい「多重インデックス」のテーブルになり、統計レポートのように使えます。
ピボットテーブル (pivot_table
)
Excelのピボットテーブルに近い形で集計できます。
pd.pivot_table(df,
values="売上",
index="カテゴリ",
columns="顧客数",
aggfunc="sum",
fill_value=0)
index
: 行の項目columns
: 列の項目values
: 集計対象の数値aggfunc
: 集計方法(sum, mean, count など)
クロス集計 (crosstab
)
頻度(件数)をカウントするときに便利です。
pd.crosstab(df["カテゴリ"], df["顧客数"])
→ 「カテゴリ × 顧客数」の組み合わせ頻度を表にできます。
アンケート集計やアクセス解析でよく使います。
実務でよくある応用例
売上データ分析
- 商品カテゴリごとの平均売上 →
groupby("カテゴリ")["売上"].mean()
- 月ごとの売上推移 → 日付列を
pd.to_datetime
に変換してdf.resample("M")["売上"].sum()
- 地域 × 商品ごとの売上合計 →
pivot_table()
マーケティングデータ
- 広告キャンペーン別のクリック数やCV数の合計
- ユーザー属性(年齢 × 性別)の成約率のクロス集計
- 時系列でのアクセス数やCV率の推移
集計後の可視化
集計結果はそのままグラフ化できます。
df.groupby("カテゴリ")["売上"].sum().plot(kind="bar")
マーケティング分析なら棒グラフ・折れ線グラフが定番です。
KPIを可視化してチーム内に共有するのに役立ちます。
まとめ
groupby()
:基本の集計(SQL感覚)agg()
:複数の集計関数を同時に適用pivot_table()
:Excelライクなクロス集計crosstab()
:頻度集計resample()
:時系列データの集計に便利
これらを組み合わせれば、売上分析・広告効果測定・アクセス解析など、実務でよく出てくる集計はほぼカバーできます。
以上、PythonのPandasでのデータ集計についてでした。
最後までお読みいただき、ありがとうございました。