Python

Python初心者向け:ピボットテーブルの使い方を基本から解説

スポンサーリンク


▶ 縦持ちデータ・横持ちデータの変換を行いたい場合は、以下の投稿をどうぞ

▶ 条件を指定してデータフレームから必要なデータを抽出したい場合は、以下の記事を参考にしてください。

はじめに

今回はpandasのpivot_table()メソッドについて扱います。このブログでは、「縦持ちデータから横持ちデータへの変換」を紹介したときに簡単に触れてます。今回は、pivot_table()メソッドだけをとりあげて、学んでいきましょう。

サンプルデータの作成

このブログで何度か使っている、どうぶつたちのサンプルデータを使いましょう。以下のコードでデータを作ってください。

# ライブラリのインポート
import pandas as pd
import numpy as np

# 表示設定
pd.options.display.precision = 1

# サンプルデータの作成
df_sample=pd.DataFrame({
    '会員No':['C000023','C000032','Z000018','Z000021','C000023','Z000018','C000018','C000018','C000031','Z000032'],
    'なまえ':['らくだ','らいおん','ぱんだ','しまうま','きりん','うさぎ','ねこ','いぬ','おおかみ','かば'],
    '動物園':['上野動物園','こどもどうぶつえん','上野動物園','こどもどうぶつえん','ズーラシア','ズーラシア','ズーラシア','こどもどうぶつえん','ズーラシア','こどもどうぶつえん'],
    '年齢':[23,32,18,21,23,18,18,18,31,32],
    '来園回数':[8,3,6,2,1,4,6,9,8,3],
    '購入金額':[28000,12000,22000,6000,4500,8500,14000,25000,17500,7600]
})
df_sample

年齢のところは、「年代」にカテゴリ化しておきましょう。

# 年齢をカテゴリ化
df_sample['年代']=df_sample['年齢'].apply(lambda x:np.floor(x/10) * 10)
df_sample['年代'].replace({10:'10代',20:'20代',30:'30代'},inplace=True)
df_sample=df_sample[['会員No', '動物園','なまえ', '年代','年齢', '来園回数','購入金額']]
df_sample.drop('年齢',inplace=True,axis=1)
df_sample

pivot_table()を使ってみる

では、サンプルデータを使ってpivot_table()を試していきましょう。まず、pivot_table()メソッドの基本を整理しておきましょう。必須の引数は以下の3つとなります。

  • data:第一引数です。データフレームを指定
  • index:行見出しにする変数名を指定
  • columns:列見出しにする変数名を指定

この指定をすれば、データフレームの中から、index, columnsで指定されなかった変数のうち、数値をあらわす変数のみが選択されて「平均値」が計算されます。早速、やってみましょう。

pd.pivot_table(df_sample,index='年代',columns='動物園')

このように、3つの変数を指定するだけで、残りの数値の変数に対して平均値を計算することができました。数値による変数が複数ある場合は、今回の結果のようにその変数の分だけ計算されます。

引数としてvaluesを指定すると、ここで指定した変数だけが計算されるようになります。これもやってみましょう。

pd.pivot_table(df_sample,index='年代',columns='動物園',values='購入金額')

先ほどは、来園回数と購入金額の両方が計算されていましたが、今回はvaluesで指定した購入金額のみが計算されています。

ここまでは、計算方法の指定をしていなかったため、すべて平均値の計算がされていました。引数aggfuncで計算方法を指定することができます。

pd.pivot_table(df_sample,index='年代',columns='動物園',values='購入金額',aggfunc='sum')

aggfuncをリストで指定すれば、複数の計算方法を指定することもできます。ここでは、meanとsumを指定してみましょう。

pd.pivot_table(df_sample,index='年代',columns='動物園',values='購入金額',aggfunc=['mean','sum'])

さらに引数marginsで合計の表示/非表示を設定することができる。marginsで合計を指定した場合は、合計の項目名を引数magins_nameで指定することができます。

pd.pivot_table(df_sample,index='年代',columns='動物園',values='購入金額',aggfunc='sum',margins=all, margins_name='合計')
スポンサーリンク

まとめ

いかがでしたか?今回はpivot_table()メソッドについて扱いました。このブログでご紹介するのは遅くなりましたが、よく使うメソッドですね。データの概要把握の時には、よく活躍するメソッドになります。しっかり復習しておきましょう。

▶ ピボットテーブルのさらに詳しい使い方は以下の記事をどうぞ。

コメント

タイトルとURLをコピーしました