我有一个像这样的数据框:

id-customer      status
1                 Won
1                 Won
2                 Won
2                 Won
3                 Not won


并且我想添加一个新列,这是一个winrate,计算公式为:“获胜”数量由id-customer分组的总数划分。

所以我应该有一个这样的数据框:

id-customer      status           winrate
1                 Won             1 (2/2)
1                 Won             1  (2/2)
2                 Won             1 (2/2)
2                 Won             1   (2/2)
3                 Not won         0  (0/1)


我这样尝试:

df_winrate=df.groupby(['id-customer'],as_index=False)['status'].sum()


但这没用

您能帮我计算winrate栏吗?

谢谢

最佳答案

使用groupby并使用sum计算sizetransform的比率,将结果广播到原始大小。

g = df.status.eq('Won').groupby(df['id-customer'])
g.transform('sum')/g.transform('size')

0    1.0
1    1.0
2    1.0
3    1.0
4    0.0

07-27 20:03