Pandasでgroupbyでグループごとに計算する

※当サイトはアフィリエイト広告を利用しています

データ分析

特定のグループごとに計算をするgroupbyの計算方法

groupbyの計算方法

1つの計算方法のみを出力する場合

kaggleのタイタニックのデータセットをもとに説明します。

性別の平均年齢を知りたい場合…

import pandas as pd

TRAIN = pd.read_csv('train.csv')
TRAIN_groupby = TRAIN[['Sex','Age']].groupby(['Sex']).mean()

#        	Age
# Sex	
# female	27.915709
# male	30.726645

「TRAIN[[‘Sex’,’Age’]]」でグループ分けのカラムと集計したいカラムを残します。
「.groupby([‘Sex’])」で性別でグループ分けをし、「.mean()」で平均を出します。

sum合計
mean平均
median中央値
std標準偏差
min最小値
max最大値
countNullを除いた個数
sizeNullを含めた個数
describe統計量

複数の軸で複数の計算をする方法

PclassとSexでグループ分けをしてそれぞれの年齢について集計したい場合、

TRAIN = pd.read_csv('train.csv')
TRAIN_groupby = TRAIN[['Pclass','Sex','Age']].groupby(['Pclass','Sex']).agg(['mean','median','size'])
Age
meanmediansize
PclassSex
1female34.61176535.094
male41.28138640.0122
2female28.72297328.076
male30.74070730.0108
3female21.75000021.5144
male26.50758925.0347

「.groupby([‘Pclass’,’Sex’])」で乗客クラスと性別でグループ分けします。
複数の集計をしたい場合は「.agg([****])」でまとめます。

統計量を一気に確認したい場合はdescribeも使えます

TRAIN_groupby = TRAIN[['Pclass','Sex','Age']].groupby(['Pclass','Sex']).agg(['describe'])
Age
describe
countmeanstdmin25%50%75%max
PclassSex
1female85.034.61176513.6120522.0023.00035.044.0063.0
male101.041.28138615.1395700.9230.00040.051.0080.0
2female74.028.72297312.8727022.0022.25028.036.0057.0
male99.030.74070714.7938940.6723.00030.036.7570.0
3female102.021.75000012.7299640.7514.12521.529.7563.0
male253.026.50758912.1595140.4220.00025.033.0074.0

マルチインデックス、マルチカラムの解除方法

groupbyで集計すると、インデックスやカラムが複数存在するマルチインデックス、マルチカラムの形で出力されます。これを通常のテーブルの形に直す方法について。

TRAIN_groupby = TRAIN[['Pclass','Sex','Age']].groupby(['Pclass','Sex']).agg(['mean','median','size'])
TRAIN_groupby.columns = TRAIN_groupby.columns.droplevel(0)
TRAIN_groupby = TRAIN_groupby.reset_index()
PclassSexmeanmediansize
01female34.61176535.094
11male41.28138640.0122
22female28.72297328.076
32male30.74070730.0108
43female21.75000021.5144
53male26.50758925.0347

「.columns.droplevel(0)」でマルチカラムを解除します。3つ以上のマルチカラムの場合は.droplevel(0)を重ねて「.columns.droplevel(0).droplevel(0)」で解除できます。

また、「.reset_index()」でマルチインデックスを解除できます。

この記事を読んだ人がよく見ています

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