Pandasの pivot_table(ピボットテーブル) は、データを集計・要約するための非常に強力な機能です。
Excelのピボットテーブルに似ており、行や列を指定して集計値を計算したり、多次元的な分析を可能にします。
以下で詳しく解説します。
目次
主な引数
- data: 対象のDataFrame
- values: 集計対象となる列(数値列を指定)
- index: 行方向に使う列(グループ化の軸)
- columns: 列方向に使う列(グループ化の軸)
- aggfunc: 集計関数(既定は
mean
、例:sum
,count
,max
,min
,np.median
など) - fill_value: 欠損値に置き換える値
- margins: 合計(小計)を表示するかどうか(True/False)
- margins_name: 合計列/行のラベル名(デフォルトは “All”)
- dropna: NaNをキーとして含めるかどうか(既定は True=NaNは除外)
基本的な例
import pandas as pd
data = {
'支店': ['東京', '東京', '大阪', '大阪', '福岡', '福岡'],
'担当者': ['A', 'B', 'A', 'C', 'B', 'C'],
'売上': [100, 150, 200, 250, 300, 100]
}
df = pd.DataFrame(data)
# 支店ごとの売上平均
pd.pivot_table(df, values='売上', index='支店', aggfunc='mean')
複数の集計軸
行(index)や列(columns)を複数指定できます。
pd.pivot_table(df, values='売上', index=['支店'], columns=['担当者'], aggfunc='sum', fill_value=0)
複数の集計関数を使う
aggfunc
にリストや辞書を渡すと、複数の集計が可能です。
import numpy as np
pd.pivot_table(df, values='売上', index='支店', aggfunc=[np.sum, np.mean, np.max])
全体合計を出す(margins)
pd.pivot_table(df, values='売上', index='支店', aggfunc='sum', margins=True, margins_name='合計')
実務でよく使うシナリオ
- 販売データ分析
- 支店 × 商品カテゴリーごとの売上合計
- 月ごとの売上推移
- 人事データ分析
- 部署 × 性別ごとの平均給与
- 勤続年数別の離職率
- アクセスログ分析
- 日付 × ページのアクセス数合計
- デバイス別の平均滞在時間
groupby との違い
groupby
: より柔軟でプログラマブル。出力はシリーズやDataFrameで自由度が高い。pivot_table
: 表形式(行×列)で見やすい形に集約できる。特にレポートや可視化前処理に便利。
まとめ
Pandasの pivot_table
は、データ分析における「クロス集計表」を簡単に作れる便利な関数です。
index
(行)、columns
(列)、values
(集計対象)を指定aggfunc
で自由に集計関数を切り替えfill_value
やmargins
を活用すると、実務的なレポートに即使える
以上、PythonのPandasのpivot tableについてでした。
最後までお読みいただき、ありがとうございました。