データの集約
GroupByオブジェクトは、最適化されたメソッドが存在します。以下はその一覧です。
table: 最適化済みのGroupBy メソッド
関数名 説明
count グループ内の欠損値以外の値の数。
sum 欠損値以外の合計。
mean 欠損値以外の平均。
median 欠損値以外のの算術中央値。
std, var バイアスの掛かっていない(n-1を分母とした)標準偏差と分散。
min, max 欠損値以外の最小値と最大値。
prod 欠損値以外の積。
first, last 欠損値以外の最初と最後の値。
上記以外にも、シリーズやデータフレームの分位点を計算してくれるquantileメソッドなどが使えます。また、自身で定義したメソッドも使えます。その場合、aggregateあるいはaggメソッドに渡します。
code: Python
df
--------------------------------------------------------------------------
data1 data2 key1 key2
0 -0.204708 1.393406 a one
1 0.478943 0.092908 a two
2 -0.519439 0.281746 b one
3 -0.555730 0.769023 b two
4 1.965781 1.246435 a one
--------------------------------------------------------------------------
code: Python
grouped = df.groupby('key1')
# quantileはシリーズやデータフレームの列の分位点を計算する
--------------------------------------------------------------------------
key1
a 1.668413
b -0.523068
Name: data1, dtype: float64
--------------------------------------------------------------------------
code: Python
# 自身で実装した関数はaggeメソッドで適用できる
def peak_to_peak(arr):
return arr.max() - arr.min()
grouped.agg(peak_to_peak)
--------------------------------------------------------------------------
data1 data2
key1
a 2.170488 1.300498
b 0.036292 0.487276
--------------------------------------------------------------------------
このように、シリーズやデータフレームのすべての列を集約するということは、つまり、適用したい関数をaggregateメソッドに渡したり、meanやstdなどのメソッドを呼んだりすることです。
このように文字列として渡すこともできます。
code: Python
grouped_pct.agg('mean')
--------------------------------------------------------------------------
day smoker
Fri No 0.151650
Yes 0.174783
Sat No 0.158048
Yes 0.147906
Sun No 0.160113
Yes 0.187250
Thur No 0.160298
Yes 0.163863
Name: tip_pct, dtype: float64
--------------------------------------------------------------------------
また、複数渡すこともできます。
code: Python
--------------------------------------------------------------------------
mean std peak_to_peak
day smoker
Fri No 0.151650 0.028123 0.067349
Yes 0.174783 0.051293 0.159925
Sat No 0.158048 0.039767 0.235193
Yes 0.147906 0.061375 0.290095
Sun No 0.160113 0.042347 0.193226
Yes 0.187250 0.154134 0.644685
Thur No 0.160298 0.038774 0.193350
Yes 0.163863 0.039389 0.151240
--------------------------------------------------------------------------
名前を付けてあげることもできます。
code: Python
--------------------------------------------------------------------------
tip_pct total_bill
Durchschnitt Abweichung Durchschnitt Abweichung
day smoker
Fri No 0.151650 0.000791 18.420000 25.596333
Yes 0.174783 0.002631 16.813333 82.562438
Sat No 0.158048 0.001581 19.661778 79.908965
Yes 0.147906 0.003767 21.276667 101.387535
Sun No 0.160113 0.001793 20.506667 66.099980
Yes 0.187250 0.023757 24.120000 109.046044
Thur No 0.160298 0.001503 17.113111 59.625081
Yes 0.163863 0.001551 19.190588 69.808518
--------------------------------------------------------------------------
code: Python
--------------------------------------------------------------------------
tip_pct size
min max mean std sum
day smoker
Fri No 0.120385 0.187735 0.151650 0.028123 9
Yes 0.103555 0.263480 0.174783 0.051293 31
Sat No 0.056797 0.291990 0.158048 0.039767 115
Yes 0.035638 0.325733 0.147906 0.061375 104
Sun No 0.059447 0.252672 0.160113 0.042347 167
Yes 0.065660 0.710345 0.187250 0.154134 49
Thur No 0.072961 0.266312 0.160298 0.038774 112
Yes 0.090014 0.241255 0.163863 0.039389 40
--------------------------------------------------------------------------