2013-12-12 78 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')