Python入門:pandasのpivot_tableで集計をわかりやすく整理する

pandas python 1

データを扱っていると、単に合計や平均を出すだけでなく、
「どの項目ごとにどうなっているか」を整理して見たい場面が増えてきます。

たとえば、国ごとの売上だけでなく、
その中でさらに商品ごとの内訳まで一目で分かるようにしたい、
というようなケースです。

このような「分析しやすい形にまとめる」処理に使われるのが、
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と似ていますが、より「分析しやすい形」に整えることができます。

最初は少し複雑に見えるかもしれませんが、
「何で分けるか」と「何を計算するか」を順番に考えていけば、
自然と理解できるようになります。

実務では非常に使用頻度の高い機能なので、
まずは簡単なデータで動きを確認するところから始めてみてください。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。