【pandas中級編③】pivot_tableの使い方をやさしく解説(Excel派必見!)

はじめに

Excelでおなじみの「ピボットテーブル」。
pandasでも、同様の機能が pivot_table() を使うことで簡単に実現できます。

  • グループごとの平均や合計を見たい
  • 男女別・年齢別などでクロス集計したい
  • 行と列で集計を並べて、見やすく比較したい

こういったニーズに応えてくれるのが pivot_table() です。
この記事では、基本構文から応用パターンまでを、やさしく・実例つきで解説します。


1. pivot_tableとは?何ができるの?

pivot_table() は、複数のカテゴリ変数に基づいて、数値データの集計を行うための関数です。
Excelのピボットテーブルと同じように、「行」「列」「値(集計対象)」を指定することで、自由にクロス集計を行えます。


2. 使用データ(例)

以下のような簡単な成績データを使って説明していきます:

名前年齢点数
太郎2088
花子2192
次郎1995
さくら2270
NaN83

3. 基本構文:index・columns・valuesを指定するだけ!

pd.pivot_table(df, index="年齢", values="点数", aggfunc="mean")

✔ 結果(年齢ごとの平均点):

      点数
年齢
19 95.0
20 88.0
21 92.0
22 70.0
  • index: 行にしたいカテゴリ
  • values: 集計する数値列
  • aggfunc: 集計方法(平均: “mean”, 合計: “sum”, 件数: “count”など)

✅ 欠損値(NaN)は自動的に除外されます(必要なら fill_value で埋められます)


4. 列(columns)を追加してクロス集計!

たとえば、次のような性別データを追加してみます:

df["性別"] = ["男", "女", "男", "女", "男"]

そして、性別ごとの平均点を年齢別に見たいときは?

pd.pivot_table(df, index="年齢", columns="性別", values="点数", aggfunc="mean")

✔ 結果:

年齢
19NaN95
20NaN88
2192NaN
2270NaN
  • columns に「性別」を指定することで、列ごとに分類された表になります。
  • 行×列でクロスされた形式になるため、見やすいカテゴリ比較表が作れます。

5. 複数列の同時集計(複数値・複数関数)

▶ 平均と最大を一度に表示

pd.pivot_table(df, index="性別", values="点数", aggfunc=["mean", "max"])

結果:

        mean  max
性別
女 81.0 92
男 88.6667 95

        ✅ aggfunc にリストで複数の関数を指定することも可能です。


6. 件数を集計したいとき:aggfunc=”count”

pd.pivot_table(df, index="性別", values="点数", aggfunc="count")

結果:

      点数
性別
女 2
男 3

これは、「性別ごとの点数データの数(=人数)」を表しています。


7. NaN対策:fill_valueで空欄を0に

空欄が気になる場合は、fill_value を使って埋めることもできます。

pd.pivot_table(df, index="年齢", columns="性別", values="点数", aggfunc="mean", fill_value=0)

❗ 特に、プレゼンやレポート用に表を出力する場合、NaNが多いと読みにくくなるので便利です。


8. pivot_tableとgroupbyの違い

機能pivot_tablegroupby
クロス集計(列方向)✅ columnsで指定可能
複数集計関数✅ 複数aggfuncが自然に使える✅(やや構文が複雑)
欠損値処理(fill_value)✅ 自動対応あり

groupby でも集計はできますが、「見やすさ」「柔軟性」では pivot_table に軍配が上がります。


✅ まとめ

  • pivot_table()Excelユーザーに最も親しみやすいpandasの集計関数
  • index, columns, values, aggfunc の4つを指定するだけでOK
  • 平均・合計・最大・件数など、さまざまな集計が一発で可能
  • fill_value で空欄対応もできて、プレゼン資料にも使いやすい!

🧭 参考リンク・シリーズナビ

コメント

タイトルとURLをコピーしました