特定のグループごとに計算をする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 | 最大値 |
count | Nullを除いた個数 |
size | Nullを含めた個数 |
describe | 統計量 |
複数の軸で複数の計算をする方法
PclassとSexでグループ分けをしてそれぞれの年齢について集計したい場合、
TRAIN = pd.read_csv('train.csv')
TRAIN_groupby = TRAIN[['Pclass','Sex','Age']].groupby(['Pclass','Sex']).agg(['mean','median','size'])
Age | ||||
---|---|---|---|---|
mean | median | size | ||
Pclass | Sex | |||
1 | female | 34.611765 | 35.0 | 94 |
male | 41.281386 | 40.0 | 122 | |
2 | female | 28.722973 | 28.0 | 76 |
male | 30.740707 | 30.0 | 108 | |
3 | female | 21.750000 | 21.5 | 144 |
male | 26.507589 | 25.0 | 347 |
「.groupby([‘Pclass’,’Sex’])」で乗客クラスと性別でグループ分けします。
複数の集計をしたい場合は「.agg([****])」でまとめます。
統計量を一気に確認したい場合はdescribeも使えます
TRAIN_groupby = TRAIN[['Pclass','Sex','Age']].groupby(['Pclass','Sex']).agg(['describe'])
Age | |||||||||
---|---|---|---|---|---|---|---|---|---|
describe | |||||||||
count | mean | std | min | 25% | 50% | 75% | max | ||
Pclass | Sex | ||||||||
1 | female | 85.0 | 34.611765 | 13.612052 | 2.00 | 23.000 | 35.0 | 44.00 | 63.0 |
male | 101.0 | 41.281386 | 15.139570 | 0.92 | 30.000 | 40.0 | 51.00 | 80.0 | |
2 | female | 74.0 | 28.722973 | 12.872702 | 2.00 | 22.250 | 28.0 | 36.00 | 57.0 |
male | 99.0 | 30.740707 | 14.793894 | 0.67 | 23.000 | 30.0 | 36.75 | 70.0 | |
3 | female | 102.0 | 21.750000 | 12.729964 | 0.75 | 14.125 | 21.5 | 29.75 | 63.0 |
male | 253.0 | 26.507589 | 12.159514 | 0.42 | 20.000 | 25.0 | 33.00 | 74.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()
Pclass | Sex | mean | median | size | |
---|---|---|---|---|---|
0 | 1 | female | 34.611765 | 35.0 | 94 |
1 | 1 | male | 41.281386 | 40.0 | 122 |
2 | 2 | female | 28.722973 | 28.0 | 76 |
3 | 2 | male | 30.740707 | 30.0 | 108 |
4 | 3 | female | 21.750000 | 21.5 | 144 |
5 | 3 | male | 26.507589 | 25.0 | 347 |
「.columns.droplevel(0)」でマルチカラムを解除します。3つ以上のマルチカラムの場合は.droplevel(0)を重ねて「.columns.droplevel(0).droplevel(0)」で解除できます。
また、「.reset_index()」でマルチインデックスを解除できます。