今回は、PythonのPivot Tablesについてです。
Pandasモジュールのpivot_table関数を用いて実装します。
この記事もチェック:Pandasのmelt()とpivot()関数を使ってデータの整形をする方法
ピボットテーブルとは
ピボットテーブルは、Microsoft Excelの重要な機能であり、Excelを企業で普及させた理由の1つです。
ピボットテーブルは、データの分析を実行するための大きな柔軟性を提供します。
列を行に、行を列に変換することができます。
任意のパラメータでグループ化できるため、パンダのGroupby関数と混同されやすい。
ピボットテーブルは、多次元版の GroupBy 関数だと考えてください。
Pythonでピボットテーブルを実装するためのステップ
さっそくPythonでピボットテーブルを実装してみましょう。
1. 好きなデータセットを読み込む
今回はPokémon with statsのデータセットを分析します(Kaggleからダウンロード)。
データセットはこちらで入手できます。
また、「ポケモンって何?」という方のために、こちらのリンクから確認できます。
ポケモンが好きかどうかに関係なく、この記事から100%得ることができます。
全部捕まえなきゃ…。
import pandas as pd
#importing the datasetdata = pd.read_csv('Pokemon.csv')
data.head() |
DataFrame.pivot_table(data, values=None, index=None,columns=None, aggfunc='mean')
|
2. 2. pivot_table()メソッドの構文
df.groupby(['Type 1'])[['Speed']].mean()
|
データフレームに対して pivot_table メソッドを呼び出したら、メソッドに渡される重要な入力引数を分解してみましょう。
- データ – 集計関数を適用する数値列です。
- インデックス – 行として変換したい列。
- 列 – 列として保存したい列変数。
- aggfunc – データに対して実行する操作のタイプ。
例題を出せば、もっと分かりやすくなるはずだ。
この記事もチェック:Pandasのastypeメソッドを使ってデータの型(dtype)を変換する方法
3. Python による pivot_tables の実装
例えば、タイプ1に属するポケモンのスピードの平均を求めるとします。
pandasの Groupby を使えば簡単にできますが、同じ出力は pivot_table を使えばもっときれいなコードで簡単に得られます。
それぞれの例で、ゆっくりとpivot_tableの全貌を探っていきましょう。
df.pivot_table('Speed' , index = ['Type 1'], aggfunc = 'mean')
|
pivot_table`を使用した同様の結果
df.pivot_table('Speed' , index = ['Type 1'] , columns= ['Legendary'] , aggfunc = 'mean')
|
df['speed_range'] = pd.cut(df['Speed'] , [0,40,60,80,120] , include_lowest=True)
|
4. ピボットテーブルを使った平均速度の算出
しかし、ここで、タイプ1のポケモンを伝説と非伝説に分類して、それぞれの平均速度を求めろと言われたら。
df.pivot_table('Speed' , index = ['Type 1'] , columns= ['speed_range','Legendary'] , aggfunc = 'mean')
|

じゃーん たった1行のコードで、期待通りの結果を得ることができました。
平均して、伝説のポケモンの方が非伝説のポケモンより速いことに気づかざるを得ませんでした。
ここで重要なのは、インデックスとしてType 1カラムが必要なので、pivot_tableメソッドのindex引数に渡しました。
しかし、タイプ1のポケモンは伝説か非伝説のどちらかに属しているので、データフレームを変形して、それぞれのタイプの平均速度を表示するようにしました。
これで、伝説と非伝説がデータの特徴になりました。
新しいデータのカラムとして「Legendary」特徴が必要なので、 columns パラメータに渡すだけでよいのです。
それでは、データセットを少し変更して、新しい分析を行ってみましょう。
ここでは、新しく追加された機能として Speed 変数のビンを作成します。

Legendary機能とSpeed range機能に基づいた平均速度を示すデータフレームを出力してみましょう。


Titanicのデータセットでpandasのpivot_tableを試すと、このトピックの練習を補完することができますので、ぜひ試してみてください。
Pythonのピボットテーブルは簡単なトピックではありませんが、その利点を考えると、分析ツールキットの中にこの知識を必ず入れておく必要があります。
練習あるのみです。
この記事もチェック:PythonでPandasデータフレームの列の順序を変更する4つの方法
まとめ
この記事では、Pandasのpivot_tableをデータセットに実装することで、いくつかのアイデアを得ようとしました。
これは、groupby操作の多次元版であることがわかりました(概念的に言えば)。
この記事もチェック:PythonとPandasで大規模データセットを扱うコツ4つ