[英]Python pandas groupby with lambda
My dataframe:我的数据框:
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
I want my final result looks like this:我希望我的最终结果是这样的:
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
However, I would like to do this in one shot (eg, using lambda).但是,我想一次性完成此操作(例如,使用 lambda)。 Here's what I have tried
这是我尝试过的
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
As you can see the accept_rate = 0.571429 is for the total/combined companies.如您所见,accept_rate = 0.571429 适用于总公司/合并公司。
How can I make the accept_rate to look like my desired final result?如何使 accept_rate 看起来像我想要的最终结果?
Thanks in advance!提前致谢!
你要assign
df.groupby('company').agg({'offered': 'sum', 'accepted': 'sum'}).assign(accept_rate=lambda x: x['accepted']/x['offered'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.