【Python・データ分析】ピボットテーブルの作成方法

こんにちは、Kosei(@kay_diacc2)です!

Pythonを用いたピボットテーブル作成方法の解説記事です。本記事読了後は、ピボットテーブル作成メソッドや引数を駆使して、目的に応じたテーブルが作成できるようになります。丁寧なプログラム解説もありますため是非ご覧ください。

目次

ピボットテーブルとは

ピボットテーブルとは、多様なデータの中からあるデータ断面を切り出し、分析しやすい形式に変換したテーブルです。マーケティングや財務用途で用いられる等様々な側面で応用されてます。

【実践】Pythonでピボットテーブルを作成する

Pythonを用いたピボットテーブルの作成手順を下記に示します。順を追ってプログラミングしていきましょう。

  1. データ読込
  2. pandas.pivot_table()メソッドでピボットテーブル作成
  3. 引数を駆使して多様な目的に応じたピボットテーブル作成

データ読込

ピボットテーブルを作成する上で必要なデータを読み込みます。今回はサンプルとして下記を記述します。

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_valueNull値を何で補完するか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)

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる