データを扱っていると、単に合計や平均を出すだけでなく、
「どの項目ごとにどうなっているか」を整理して見たい場面が増えてきます。
たとえば、国ごとの売上だけでなく、
その中でさらに商品ごとの内訳まで一目で分かるようにしたい、
というようなケースです。
このような「分析しやすい形にまとめる」処理に使われるのが、
pandasの pivot_table です。
見た目としてはExcelのピボットテーブルに近く、
行と列を使ってデータを整理できるのが大きな特徴です。
pandasの導入記事はこちら。
Python入門:pandasの基本をやさしく解説(データ操作の超入門) – Lean Data Office
pivot_tableとは何か?
サンプルデータの準備
まずは簡単なデータを用意します。
Python
import pandas as pd
data = {
“country”: [“JP”, “JP”, “US”, “US”, “UK”],
“product”: [“A”, “B”, “A”, “B”, “A”],
“sales”: [100, 150, 200, 250, 300]
}
df = pd.DataFrame(data)
“
Show more lines
このデータは「国」「商品」「売上」から構成されています。
ここから、集計しながら見やすい形に整理していきます。
groupbyとの違いを先に理解する
まず、pandasで集計といえば groupby が思い浮かびます。
たとえば、国ごとの売上合計は次のように書けます。
Python
df.groupby(“country”)[“sales”].sum()
Show more lines
これでも目的は達成できますが、結果は縦に並ぶだけです。
このため、もう少し複雑な分析をしようとすると、
データの構造が少し分かりにくくなります。
ここで pivot_table を使うと、
同じ集計でも「表として整理された形」で結果を得ることができます。
pivot_tableの基本的な使い方
まずは、groupbyと同じような集計をpivot_tableで行ってみます。
Python
pd.pivot_table(df, values=”sales”, index=”country”, aggfunc=”sum”)
Show more lines
このコードでは、売上(sales)を対象にして、
国(country)ごとに合計を出しています。
やっていること自体はgroupbyと同じですが、
pivot_tableでは「どう整理するか」まで含めて指定できる点が特徴です。
行と列を使って整理する
pivot_tableが本領を発揮するのは、
列方向の指定を追加したときです。
Python
pd.pivot_table(
df,
values=”sales”,
index=”country”,
columns=”product”,
aggfunc=”sum”
)
Show more lines
このコードでは、先ほどと同じように国ごとに分けながら、
さらに商品ごとに列を分けています。
つまり、国と商品の2つの軸でデータを整理している状態です。
結果として、国ごとに「どの商品でどれだけ売れているか」が
一目で分かる表になります。
このように、「分ける単位を増やしていく」ことで、
より実務に近い分析が可能になります。
処理の流れを整理して理解する
pivot_tableのコードは一見すると少し複雑ですが、
やっていることはシンプルです。
まず、どの値を集計するかを決めます(ここではsales)。
次に、どの単位で行を分けるかを指定します(country)。
さらに、列方向の分け方を指定します(product)。
最後に、どのように計算するかを指定します(sum)。
この順番で考えると、処理の意味が自然に見えてきます。
集計方法を変える
ここまででは合計を使いましたが、
pivot_tableでは他の集計も同じように指定できます。
たとえば平均を出したい場合は、次のように書きます。
Python
aggfunc=”mean”
Show more lines
また、データの件数を数えることもできます。
Python
aggfunc=”count”
Show more lines
このように、同じ形のまま計算方法だけを変えられるのも
pivot_tableの使いやすい点です。
データが存在しない場合
実際のデータでは、「その組み合わせは存在しない」というケースがよくあります。
その場合、pivot_tableの結果には NaN が入ります。
これを0として扱いたい場合は、次のようにします。
Python
pd.pivot_table(
df,
values=”sales”,
index=”country”,
columns=”product”,
aggfunc=”sum”,
fill_value=0
)
Show more lines
この指定を入れておくと、分析時に扱いやすくなります。
pivot_tableを使う意味
ここまで見てきたように、pivot_tableは単なる集計ではなく、
「見やすく整理する」ことまで含めた機能です。
実務では、単に数字を出すだけでなく、
「どこが増えているのか」「何が原因か」を考える必要があります。
そのためには、データが整理された形であることが重要です。
pivot_tableは、そのための土台を作る処理だと考えると分かりやすくなります。
まとめ
pivot_tableは、データを集計しながら表形式で整理する機能です。
groupbyと似ていますが、より「分析しやすい形」に整えることができます。
最初は少し複雑に見えるかもしれませんが、
「何で分けるか」と「何を計算するか」を順番に考えていけば、
自然と理解できるようになります。
実務では非常に使用頻度の高い機能なので、
まずは簡単なデータで動きを確認するところから始めてみてください。