こんにちは、Kosei(@kay_diacc2)です!
目次
ピボットテーブルとは

ピボットテーブルとは、多様なデータの中からあるデータ断面を切り出し、分析しやすい形式に変換したテーブルです。マーケティングや財務用途で用いられる等様々な側面で応用されてます。
【実践】Pythonでピボットテーブルを作成する
Pythonを用いたピボットテーブルの作成手順を下記に示します。順を追ってプログラミングしていきましょう。
- データ読込
- pandas.pivot_table()メソッドでピボットテーブル作成
- 引数を駆使して多様な目的に応じたピボットテーブル作成
データ読込
ピボットテーブルを作成する上で必要なデータを読み込みます。今回はサンプルとして下記を記述します。
import pandas as pd
from io import StringIO
import numpy as np
# ピボットテーブル作成用データ
csv_data = \
'''
No 名前 性別 年齢 購入回数 出身
1 田中 女 20代 1 東京
2 佐藤 女 30代 2 東京
3 山田 男 30代 4 大阪
4 高橋 男 40代 5 大阪
5 田口 女 30代 1 北海道
6 伊藤 男 30代 8 北海道
7 大野 男 30代 6 東京
8 松永 男 40代 1 東京
9 入江 女 50代 7 大阪
'''
# データフレーム
df = pd.read_table(StringIO(csv_data),sep='\s+')
Pandas.pivot_tableメソッドでピボットテーブル作成
ピボットテーブルはPandasライブラリのpivot_table()メソッドを用いて作成します。まずは、下記に示すような最小限必要な引数を指定し、テーブルを作成してみましょう!ここでデータ算出方法のデフォルトは「平均値」であり、変更したい場合はaggfuncで指定できます。
pandas.pivot_table(data, index="行のデータ項目", columns="列のデータ項目", values="値", aggfunc='mean')
以下プログラムの具体例を示します。
行項目「性別」・列項目「年齢」・値「購入回数(平均値)」
pd.pivot_table(df,index=["性別"],columns=["年齢"], values="購入回数", aggfunc="mean")

行項目「出身と性別」・列項目「年齢」・値「購入回数(平均値)」
pd.pivot_table(df,index=["出身","性別"],columns=["年齢"], values="購入回数", aggfunc="mean")

行項目「性別」・列項目「出身と年齢」・値「購入回数(平均値)」
pd.pivot_table(df,index=["性別"],columns=["出身","年齢"], values="購入回数", aggfunc="mean")

【実践】引数を駆使して多様な目的に応じたピボットテーブル作成
続いてpivot_table()メソッドの引数を理解し、分析の目的に合わせてピボットテーブルを加工できるようになりましょう。引数を全て与えた場合、下記のように記述できます。
pandas.pivot_table(data, index=None, columns=None, values=None,
aggfunc='mean', fill_value=None, dropna=True,
margins=False, margins_name='All',
observed=False, sort=True
)
Pandas.pivot_tableメソッドの引数一覧
スクロールできます
引数名 | 概要 | デフォルト |
---|---|---|
data | データ元 | 必須 |
index | 行の項目 | 必須 |
columns | 列の項目 | 必須 |
values | 値 | 必須 |
aggfunc | 値の算出方法 | “mean” (平均) |
fill_value | Null値を何で補完するか | None |
dropna | 全ての値がnullの列の削除要否 | True |
margins | 小計表示要否 | False |
margins_name | 小計の名前 | “All” |
observed | カテゴリ値で適用 | False |
sort | ソート要否 | True |
引数を用いてピボットテーブル作成
利用頻度の高い引数を用いてピボットテーブルを作成します。引き続きデータには下記を利用しますため、事前に記述しておきましょう。
import pandas as pd
from io import StringIO
import numpy as np
# ピボットテーブル作成用データ
csv_data = \
'''
No 名前 性別 年齢 購入回数 出身
1 田中 女 20代 1 東京
2 佐藤 女 30代 2 東京
3 山田 男 30代 4 大阪
4 高橋 男 40代 5 大阪
5 田口 女 30代 1 北海道
6 伊藤 男 30代 8 北海道
7 大野 男 30代 6 東京
8 松永 男 40代 1 東京
9 入江 女 50代 7 大阪
'''
# データフレーム
df = pd.read_table(StringIO(csv_data),sep='\s+')
行項目「性別」・列項目「年齢」・値「購入回数(平均値)」・小計追加
pd.pivot_table(df,index=["性別"],columns=["年齢"], values="購入回数", margins=True, margins_name="小計")

行項目「性別」・列項目「年齢」・値「購入回数(合計値)」
pd.pivot_table(df,index=["性別"],columns=["年齢"], values="購入回数", aggfunc="sum")

集計方法は用途に応じて下記のように指定可能です。
スクロールできます
算出方法 | 記述例 |
---|---|
最大値 | aggfunc = “max” |
最小値 | aggfunc = “min” |
平均値 | aggfunc = “mean” |
中央値 | aggfunc = “median” |
合計値 | aggfunc = “sum” |
行項目「性別」・列項目「年齢」・値「購入回数(平均値)」・Null値を0で補完
pd.pivot_table(df,index=["性別"],columns=["年齢"], values="購入回数", fill_value=0)

最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら