首页 > 解决方案 > groupby 后跟一个函数

问题描述

我有一个这样的数据框

name   value
a      expire
b      active
a      pending
c      pending
a      pending
d      pending
d      expire

我想要这样的回报

name    rate
a        0.33
b        0
c        0
d        0.5

逻辑是按'name'分组,然后统计expire,并在名字组中使用expire/total number。例如,a 有一个过期,两个待处理,组中的总数为 3。因此,a 应该得到 1/3 = 0.33 的比率。

我用了groupby('name')['value'].value_counts()

无论如何我可以返回一个数据框吗?

标签: python

解决方案


一种使用方式pandas.DataFrame.groupby.apply

df2 = df.groupby("name")["value"].apply(lambda x: x.eq("expire").sum()/len(x))
df2.reset_index()

输出:

  name     value
0    a  0.333333
1    b  0.000000
2    c  0.000000
3    d  0.500000

推荐阅读