我正在尝试创建一个包含组均值的新列,条件是另一列的值。这可以通过示例来最好地解释:
df = pd.DataFrame({'A': [59000000, 65000000, 434000, 434000, 434000, 337000, 11300, 11300, 11300],
'B': [1, 1 , 0, 1, 0, 0, 1, 1, 0],
'group': ["IT", "IT", "IT", "MV", "MV", "MV", "IT", "MV", "MV"]})
df
A B group
0 59000000 1 IT
1 65000000 1 IT
2 434000 0 IT
3 434000 1 MV
4 434000 0 MV
5 337000 0 MV
6 11300 1 IT
7 11300 1 MV
8 11300 0 MV
我已经设法解决了这个问题,但我正在寻找代码行更少,可能更有效率的东西。
x = df.loc[df['B']==1].groupby('group', as_index=False)['A'].mean()
x.rename(columns = {'A':'a'}, inplace = True)
df = pd.merge(df, x, how='left', on='group')
A B group a
0 59000000 1 IT 41337100
1 65000000 1 IT 41337100
2 434000 0 IT 41337100
3 434000 1 MV 222650
4 434000 0 MV 222650
5 337000 0 MV 222650
6 11300 1 IT 41337100
7 11300 1 MV 222650
8 11300 0 MV 222650
我尝试过使用转换函数,但它对我不起作用
df.loc[: , 'a'] = df.groupby('group').transform(lambda x: x[x['B']==1]['A'].mean())
qq_花开花谢_0
相关分类