Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
98 views
in Technique[技术] by (71.8m points)

python - groupby followed by a function

I have a dataframe like this

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

I want return like this

name    rate
a        0.33
b        0
c        0
d        0.5

The logic is to group by 'name', then count expire, and use expire/total number in the name group. For example a has one expire, and two pending, total number in a group is 3. Therefore, a should get a rate of 1/3 = 0.33.

I used groupby('name')['value'].value_counts()

Is there anyway I can return a dataframe?

question from:https://stackoverflow.com/questions/65895492/groupby-followed-by-a-function

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

One way using pandas.DataFrame.groupby.apply:

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

Output:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...