Pandas pivot_table 徹底解説: 複雑なデータ集計をマスターしよう!
データ分析の現場で、大量の生データから意味のある情報を抽出する際に、強力なツールとなるのが「集計」です。特に、複数の要素を組み合わせた複雑な集計を行いたい場合、Excelのピボットテーブルのように機能するPandasのpivot_table
関数が非常に役立ちます。
この記事では、Pandasのpivot_table
の基本的な使い方から、多角的なデータ分析を可能にする応用テクニックまで、徹底的に解説します。
pivot_table
ってどんなもの?
Pandasのpivot_table
関数は、DataFrameを「回転(pivot)」させて、指定した列を「行(インデックス)」「列(カラム)」に配置し、別の列の値を「集計」する機能を提供します。これは、Excelのピボットテーブルと非常に似ており、複雑なグループ化と集計を一度に行うことができます。
pivot_table
でできること
多次元の集計: 複数のカテゴリ変数を行と列に配置し、それらの組み合わせごとに数値データを集計できます。
多様な集計関数: 合計、平均、カウント、最大値、最小値、標準偏差など、様々な集計方法を選択できます。
欠損値の扱い: 集計結果の欠損値をどのように処理するかを柔軟に設定できます。
小計・総計の表示:
margins=True
を設定するだけで、行と列の総計(小計)を自動的に追加できます。
なぜpivot_table
を選ぶべきか?
groupby()
とunstack()
を組み合わせても同様の集計は可能ですが、pivot_table
を使うことには以下のようなメリットがあります。
直感的で簡潔: Excelのピボットテーブルの概念がそのままPandasに落とし込まれているため、直感的に操作でき、コードが非常に簡潔になります。
多機能性: 集計方法の指定、欠損値処理、総計の表示など、集計に必要な多くの機能が1つの関数に凝縮されています。
データ分析の効率化: 複雑なクロス集計や多角的な視点でのデータ分析を、少ないコードで素早く実行できます。
pivot_table
を始めるための準備
1. ライブラリのインポートとデータの準備
pivot_table
を使うためには、Pandasライブラリをインポートし、集計したいデータがDataFrame形式で用意されている必要があります。
import pandas as pd
import numpy as np
# サンプルデータの作成
# 架空の売上データとしましょう
data = {
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-03', '2023-01-03', '2023-01-01'],
'Region': ['East', 'West', 'East', 'West', 'East', 'West', 'East'],
'Product': ['A', 'B', 'A', 'A', 'B', 'B', 'C'],
'Sales': [100, 150, 120, 180, 200, 90, 50],
'Quantity': [10, 15, 12, 18, 20, 9, 5]
}
df = pd.DataFrame(data)
print("--- 元のデータフレーム ---")
print(df)
print("\n")
pivot_table
の基本的な使い方
pivot_table
関数には、主に以下の引数を指定します。
data
: 集計したいDataFramevalues
: 集計対象となる数値データを持つ列名index
: 行のインデックス(グループ化の基準となる列名、または列名のリスト)columns
: 列のカラム(グループ化の基準となる列名、または列名のリスト)aggfunc
: 集計関数(デフォルトは平均np.mean
)。np.sum
,len
,max
なども指定可能。複数の関数を指定することもできます。fill_value
: 集計結果の欠損値(NaN)を埋める値。margins
: 総計(行と列の合計)を表示するかどうか(True
で表示)。
最小限のサンプルプログラム
例1: RegionごとのSales合計
# 例1: RegionごとのSales合計
# index='Region' で行を地域、values='Sales' で売上を集計、aggfunc='sum' で合計を計算
pivot_sales_region = pd.pivot_table(df, values='Sales', index='Region', aggfunc='sum')
print("--- RegionごとのSales合計 ---")
print(pivot_sales_region)
print("\n")
例2: RegionとProductごとのSales平均
# 例2: RegionとProductごとのSales平均
# index=['Region', 'Product'] で行を地域と商品、aggfuncのデフォルトは平均
pivot_sales_avg = pd.pivot_table(df, values='Sales', index=['Region', 'Product'])
print("--- RegionとProductごとのSales平均 ---")
print(pivot_sales_avg)
print("\n")
例3: Regionを行、Productを列にしたSales合計(総計も表示)
# 例3: Regionを行、Productを列にしたSales合計(総計も表示)
pivot_cross_sales = pd.pivot_table(df, values='Sales', index='Region', columns='Product', aggfunc='sum', margins=True, fill_value=0)
print("--- Regionを行、Productを列にしたSales合計 (総計あり) ---")
print(pivot_cross_sales)
print("\n")
pivot_table
の応用テクニック
1. 複数の集計関数を指定する
aggfunc
に集計関数のリストを指定することで、一度に複数の集計結果を表示できます。
# RegionとProductごとのSalesの合計と平均、Quantityの合計
pivot_multi_agg = pd.pivot_table(df, values=['Sales', 'Quantity'], index='Region', columns='Product', aggfunc={'Sales': np.sum, 'Quantity': np.sum})
print("--- 複数の集計関数と値 ---")
print(pivot_multi_agg)
print("\n")
2. columns
に複数の列を指定する
columns
にもリストを指定することで、列側も多階層にすることができます。
# DateとRegionを行、Productを列にしたSales平均
pivot_multi_col = pd.pivot_table(df, values='Sales', index=['Date', 'Region'], columns='Product', aggfunc='mean', fill_value=0)
print("--- 複数インデックスと複数カラム ---")
print(pivot_multi_col)
print("\n")
3. fill_value
で欠損値を埋める
集計結果でデータが存在しない組み合わせにはNaN
(欠損値)が表示されます。これを特定の値で埋めるにはfill_value
を使います。
# 例3でfill_value=0を使っている
4. margins
で総計を表示する
margins=True
を設定すると、行と列の末尾に「All」(総計)の行と列が追加され、全体の集計値を確認できます。
# 例3でmargins=Trueを使っている
まとめ
この記事では、Pandasのpivot_table
関数について、その強力な機能、基本的な使い方、そして複数列での集計、複数集計関数の指定、欠損値処理、総計表示といった応用テクニックまでを徹底的に解説しました。
pivot_table
をマスターすることで、Excelのピボットテーブルを使っていた作業の多くをPythonコードで自動化し、より複雑で多角的なデータ集計を効率的に行えるようになります。あなたのデータ分析ワークフローにpivot_table
をぜひ取り入れてみてください!
次のステップはどうしますか?
pivot_table
でさらに高度なカスタマイズ(カスタム集計関数、階層化インデックスの操作など)について知りたいですか?それとも、melt
関数など、データの整形に関する他のPandas機能について詳しく知りたいですか?
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座