グループ演算
pandasのGroupByオブジェクトには、transformという組み込みのメソッドがあります。このメソッドはapplyに似ていますが、適用できる関数の種類に、さらに以下の制約がかかります。
グループの形状にブロードキャスト可能なスカラー値を生成できる必要がある。
入力グループと同じ形状を持つオブジェクトを生成できる必要がある。
入力オブジェクトを改変する操作であってはならない。
code: Python
'value': np.arange(12.)})
df
--------------------------------------------------------------------------
key value
0 a 0.0
1 b 1.0
2 c 2.0
3 a 3.0
4 b 4.0
5 c 5.0
6 a 6.0
7 b 7.0
8 c 8.0
9 a 9.0
10 b 10.0
11 c 11.0
--------------------------------------------------------------------------
code: Python
g = df.groupby('key').value
g.mean()
--------------------------------------------------------------------------
key
a 4.5
b 5.5
c 6.5
Name: value, dtype: float64
--------------------------------------------------------------------------
code: Python
g.transform(lambda x: x.mean())
--------------------------------------------------------------------------
0 4.5
1 5.5
2 6.5
3 4.5
4 5.5
5 6.5
6 4.5
7 5.5
8 6.5
9 4.5
10 5.5
11 6.5
Name: value, dtype: float64
--------------------------------------------------------------------------
code: Python
g.transform('mean')
--------------------------------------------------------------------------
0 4.5
1 5.5
2 6.5
3 4.5
4 5.5
5 6.5
6 4.5
7 5.5
8 6.5
9 4.5
10 5.5
11 6.5
Name: value, dtype: float64
--------------------------------------------------------------------------
code: Python
g.transform(lambda x: x * 2)
--------------------------------------------------------------------------
0 0.0
1 2.0
2 4.0
3 6.0
4 8.0
5 10.0
6 12.0
7 14.0
8 16.0
9 18.0
10 20.0
11 22.0
Name: value, dtype: float64
--------------------------------------------------------------------------
code: Python
g.transform(lambda x: x.rank(ascending=False))
--------------------------------------------------------------------------
0 4.0
1 4.0
2 4.0
3 3.0
4 3.0
5 3.0
6 2.0
7 2.0
8 2.0
9 1.0
10 1.0
11 1.0
Name: value, dtype: float64
--------------------------------------------------------------------------