将groupby mean赋值给python中的条件列

2024-06-28 11:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,假设我有如下的df\u测试:

df_test = pd.DataFrame(dict(A=['bond1','bond1', 'bond2', 'bond2', 'bond3'],
 B=[-1, 1, 2, 3, 4]))

我想创建一个列C,其中如果B<;0,它是B groupby a的平均值,如果B>;0,它是B。我可以想到的方法是:

group_mean = df_test.groupby('A')['B'].mean().reset_index()
df_merge = df_test.merge(group_mean, on=['A'], how='left')
df_merge['C'] = df_merge.apply(lambda x: x['B_y'] if x['B_x'] <0 else x['B_x'], axis=1)

想知道是否有可能在一行中完成,比如:

df_test['C'] = df_test.groupby('B').transform(...)

谢谢你的帮助


Tags: testltgtdataframedfgroupmergemean
1条回答
网友
1楼 · 发布于 2024-06-28 11:06:13

IIUC公司:

df_test['C'] = df_test.groupby('A')['B'].transform('mean').mask(df['B']>0, df_test['B'])

输出:

       A  B    C
0  bond1 -1  0.0
1  bond1  1  1.0
2  bond2  2  2.5
3  bond2  3  2.5
4  bond3  4  4.0

相关问题 更多 >