使用条件列填充单元格意味着

时间:2013-12-12 15:49:01

标签: python pandas

考虑以下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()

如何以另一个列值为条件进行此条件化?

2 个答案:

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