考虑以下DataFrame:
df2 = pd.DataFrame({
'VAR_1' : [1,1,1,3,3],
'GROUP': [1,1,1,2,2],
})
我的目标是创建一个单独的列“GROUP_MEAN”,其中包含“VAR_1”列算术平均值。
但是 - 它应该始终考虑“GROUP”中的行值。
GROUP VAR_1 GROUP_MEAN
0 1 1 Mean Value GROUP = 1
1 1 1 Mean Value GROUP = 1
2 1 1 Mean Value GROUP = 1
3 2 3 Mean Value GROUP = 2
4 2 3 Mean Value GROUP = 2
我可以轻松访问整体意思:
df2['GROUP_MEAN'] = df2['VAR_1'].mean()
如何以另一个列值为条件进行此条件化?
答案 0 :(得分:3)
我认为这是transform
的完美用例:
>>> df2 = pd.DataFrame({'VAR_1' : [1,2,3,4,5], 'GROUP': [1,1,1,2,2]})
>>> df2["GROUP_MEAN"] = df2.groupby('GROUP')['VAR_1'].transform('mean')
>>> df2
GROUP VAR_1 GROUP_MEAN
0 1 1 2.0
1 1 2 2.0
2 1 3 2.0
3 2 4 4.5
4 2 5 4.5
[5 rows x 3 columns]
通常,如果要在组的所有条目中广播结果,则使用transform
。
答案 1 :(得分:2)
假设实际数据框除了VAR_1
ts = df2.groupby( 'GROUP' )['VAR_1'].aggregate( np.mean )
df2[ 'GROUP_MEAN' ] = ts[ df2.GROUP ].values
或者最后一行也可以是:
df2 = df2.join( ts, on='GROUP', rsuffix='_MEAN' )