目次
pivot_tableメソッドによるデータの要約
Pandasの pivot_table メソッドを使用すると、大量のデータを特定の切り口で整理し、クロス集計を行うことができます。Excelのピボットテーブル機能と同様に、行と列を指定してデータの平均や合計を算出する際に非常に強力なツールとなります。
主要なパラメータとその意味
pivot_table で頻繁に使用されるパラメータを以下の表にまとめます。
| パラメータ | 意味 |
| index | 行インデックスとして使用する列名。複数指定可能。 |
| columns | 列インデックスとして使用する列名。複数指定可能。 |
| values | 集計対象となる数値データの列名。 |
| fill_value | 欠損値(NaN)が発生した場合に補完する値。 |
| aggfunc | 集計方法を指定する関数(平均、合計など)。デフォルトは平均。 |
ピボットテーブルの作成例
ここでは、複数の倉庫における「商品の種類」と「配送先エリア」別の配送料金を管理するシナリオを想定したコードを作成します。
import pandas as pd
import numpy as np
# 物流データの定義
# 倉庫名(Warehouse)、商品種別(Product)、エリア(Area)、配送料(Shipping_Fee)
logistics_data = {
"Warehouse": ["East", "East", "East", "West", "West", "West", "North", "North", "North"],
"Product": ["Food", "Daily", "Daily", "Food", "Daily", "Food", "Food", "Daily", "Daily"],
"Area": ["Tokyo", "Tokyo", "Osaka", "Osaka", "Tokyo", "Osaka", "Tokyo", "Osaka", "Tokyo"],
"Shipping_Fee": [850, 600, 1200, 950, 700, 1100, 900, 1150, 650]
}
df = pd.DataFrame(logistics_data)
# pivot_tableを使用してクロス集計を実行
# 倉庫(Warehouse)を行、商品種別(Product)を列に配置し、配送料の平均を算出
# データが存在しない組み合わせは0で埋める
pivot_df = df.pivot_table(
index="Warehouse",
columns="Product",
values="Shipping_Fee",
fill_value=0,
aggfunc=np.mean
)
print("--- 元の物流データ ---")
print(df)
print("\n--- 倉庫×商品種別の平均配送料(ピボットテーブル) ---")
print(pivot_df)
実行結果
上記のコードを実行すると、行と列が整理された集計結果が得られます。
--- 元の物流データ ---
Warehouse Product Area Shipping_Fee
0 East Food Tokyo 850
1 East Daily Tokyo 600
2 East Daily Osaka 1200
3 West Food Osaka 950
4 West Daily Tokyo 700
5 West Food Osaka 1100
6 North Food Tokyo 900
7 North Daily Osaka 1150
8 North Daily Tokyo 650
--- 倉庫×商品種別の平均配送料(ピボットテーブル) ---
Product Daily Food
Warehouse
East 900.0 850.0
North 900.0 900.0
West 700.0 1025.0
コードの解説と補足
- 集計の仕組み:
aggfunc=np.meanを指定することで、同じ「倉庫」かつ同じ「商品種別」に該当するデータが複数ある場合、その平均値を算出しています。 - 欠損値の処理:
fill_value=0を設定することで、特定の組み合わせ(例:特定の倉庫に特定の商品が存在しない場合など)で計算結果がNaN(非数)になる箇所を、自動的に0として出力します。 - 柔軟な集約:
aggfuncにはnp.sum(合計)やlen(件数)、np.max(最大値)など、用途に合わせた関数を指定することが可能です。
このように pivot_table を活用することで、複雑な生データからビジネス上の意思決定に必要な傾向を即座に抽出できるようになります。
