2013-12-12 76 views
1

考虑下面的数据框:有条件柱填充细胞是指

df2 = pd.DataFrame({ 
    'VAR_1' : [1,1,1,3,3], 
    'GROUP': [1,1,1,2,2], 
}) 

我的目标IST创建一个单独的列“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() 

我如何去制作这个条件上另一列值?

+1

'grouby'? 'df2.groupby( '集团')。意思是()' – Justin

回答

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 whe ñ你想在该组的所有条目上广播结果。

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')