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形式で用意されている必要があります。

Python
 
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: 集計したいDataFrame

  • values: 集計対象となる数値データを持つ列名

  • index: 行のインデックス(グループ化の基準となる列名、または列名のリスト)

  • columns: 列のカラム(グループ化の基準となる列名、または列名のリスト)

  • aggfunc: 集計関数(デフォルトは平均np.mean)。np.sum, len, maxなども指定可能。複数の関数を指定することもできます。

  • fill_value: 集計結果の欠損値(NaN)を埋める値。

  • margins: 総計(行と列の合計)を表示するかどうか(Trueで表示)。

 

最小限のサンプルプログラム

 

 

例1: RegionごとのSales合計

 

Python
 
# 例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平均

 

Python
 
# 例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合計(総計も表示)

 

Python
 
# 例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に集計関数のリストを指定することで、一度に複数の集計結果を表示できます。

Python
 
# 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にもリストを指定することで、列側も多階層にすることができます。

Python
 
# 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を使います。

Python
 
# 例3でfill_value=0を使っている

 

4. marginsで総計を表示する

 

margins=Trueを設定すると、行と列の末尾に「All」(総計)の行と列が追加され、全体の集計値を確認できます。

Python
 
# 例3でmargins=Trueを使っている

 

まとめ

 

この記事では、Pandasのpivot_table関数について、その強力な機能、基本的な使い方、そして複数列での集計、複数集計関数の指定、欠損値処理、総計表示といった応用テクニックまでを徹底的に解説しました。

pivot_tableをマスターすることで、Excelのピボットテーブルを使っていた作業の多くをPythonコードで自動化し、より複雑で多角的なデータ集計を効率的に行えるようになります。あなたのデータ分析ワークフローにpivot_tableをぜひ取り入れてみてください!


 

次のステップはどうしますか?

 

pivot_tableでさらに高度なカスタマイズ(カスタム集計関数、階層化インデックスの操作など)について知りたいですか?それとも、melt関数など、データの整形に関する他のPandas機能について詳しく知りたいですか?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座