带lambd的PythonPandasgroupby

2024-09-28 03:23:10 发布

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

我的数据帧:

df = pd.DataFrame({'company': ['A', 'A', 'A', 'A', 'A','B','B','B','B','B'],
                      'offered': [1, 1, 0, 1, 1, 1, 0, 0, 1, 1],
                      'accepted': [0, 1, 0, 1, 1, 0, 0, 0, 1, 0]})

    company offered accepted
0   A       1       0
1   A       1       1
2   A       0       0
3   A       1       1
4   A       1       1
5   B       1       0
6   B       0       0
7   B       0       0
8   B       1       1
9   B       1       0

我希望我的最终结果如下所示:

df2 = df.groupby('company')[['offered', 'accepted']].agg('sum')
df2['accept_rate'] = df2['accepted']/df2['offered']
df2

    offered accepted    accept_rate
company         
A   4       3           0.750000
B   3       1           0.333333

但是,我希望一次完成(例如,使用lambda)。这是我试过的

df['accept_rate'] = df['accepted'] / df['offered']
df.groupby('company')[['offered', 'accepted', 'accept_rate']].agg({'offered': 'sum',
                                                    'accepted': 'sum',
                                                    'accept_rate': lambda x: df['accepted'].sum()/df['offered'].sum()})

    offered accepted    accept_rate
company         
A   4       3           0.571429
B   3       1           0.571429

如您所见,接受率=0.571429适用于总公司/合并公司

如何使接受率看起来像我期望的最终结果

提前谢谢


Tags: 数据lambdadataframedfratecompanyaggpd
1条回答
网友
1楼 · 发布于 2024-09-28 03:23:10

你想要assign

df.groupby('company').agg({'offered': 'sum', 'accepted': 'sum'}).assign(accept_rate=lambda x: x['accepted']/x['offered'])

相关问题 更多 >

    热门问题