【Pandas】ピボットテーブル(pivot_table)で計算方法を指定する方法

Python

前回は基本的なpivot_table()関数の使い方を説明いたしましたが、今回は集計の計算方法の指定について紹介したいと思います。

pivot_table()関数はデフォルトでmean(平均値)を使って算出しますが、aggfuncパラメータで指定することにより集計方法を任意のものに指定できます。

ad

集計の種類

今回、紹介するのは以下の集計となります

集計 関数
件数 len
合計 np.sum
最小値 np.min
最大値 np.max
中央値 np.median
平均値 np.mean
標準偏差 np.std

サンプルデータの取得

前回に引き続きタイタニックデータを例に説明いたします

import numpy as np
import pandas as pd

# タイタニックデータの取得
url='https://raw.githubusercontent.com/mwaskom/seaborn-data/master/raw/titanic.csv'
titanic=pd.read_csv(url)

# 年齢に欠損があるので欠損値に平均年齢を代入
titanic["age"] = titanic["age"].fillna(titanic["age"].median())

# データの確認
titanic.head(3)
a survived pclass name sex age sibsp parch ticket fare
0 0 3 Braund, Mr. male 22.0 1 0 A/5 7.25
1 1 1 Cumings, female 38.0 1 0 PC 17599
2 1 3 Heikkinen, female 26.0 0 0 STO 7.9250

客室ランク(pclass)と性別(sex)を掛け合わせた年齢(age)の集計を例といたします

件数、合計

件数

件数を算出するには組み込み関数のlen()を指定します。
ただし、関数を指定する場合は()をつけないように気をつけてください。

単純に件数を求めるのであればcrosstab()関数の方がオススメです。こちらの方が正規化(Normalize)指定が選択できるため、分布を測定するにはcrosstab()関数を使うことが多いです。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=len)

合計

values値の合計値を見るにはnp.sumを指定します。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=np.sum)

最大/最小/中央値

最大値

values値の最大値を見るにはnp.maxを指定します。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=np.max)

最小値

values値の最小値を見るにはnp.minを指定します。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=np.min)

中央値

values値の中央値を見るにはnp.medianを指定します。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=np.median)

平均値、標準偏差

平均値

values値の平均値を見るにはnp.meanを指定します。
aggfuncはnp.meanがデフォルト値なので平均値を取得したい場合はaggfuncを指定しないことの方が多いです。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=np.mean)

標準偏差

values値の標準偏差を見るにはnp.stdを指定します。

pd.pivot_table(titanic, index='pclass', columns='sex',  values='age', aggfunc=np.std)

コメント