[英]how to calculate the percentage in a group of columns in pandas dataframe while keeping the original format of data
[英]How to calculate % while keeping structure of the Dataframe
有人可以建议如何使用pandas添加和计算获胜百分比,同时保持数据框架的结构?
原始数据帧:
Date Name Place
21-Mar John 1
22-Apr John 2
23-May John 1
22-Apr Alex 2
23-May Alex 2
21-Mar Jeff 1
22-Apr Jeff 8
23-May Jeff 5
22-Apr Randy 4
23-May Randy 5
23-Jun Randy 1
24-Jul Randy 1
所需数据框:
Date Name Place Winning %
21-Mar John 1 0.67
22-Apr John 2 0.67
23-May John 1 0.67
22-Apr Alex 2 0.00
23-May Alex 2 0.00
21-Mar Jeff 1 0.33
22-Apr Jeff 8 0.33
23-May Jeff 3 0.33
22-Apr Randy 3 0.50
23-May Randy 2 0.50
23-Jun Randy 1 0.50
24-Jul Randy 1 0.50
获胜%=(第1名的总数)/(游泳参加比赛的次数)
例如:John参加了3次比赛并获得了第2名。 因此,2/3 = 0.67
我尝试过使用交叉表,但是无法保留数据帧的原始结构。
通过Series.eq
比较==
值,并使用GroupBy.transform
计算mean
,返回与原始DataFrame
相同长度的Series
:
df['Winning %'] = df['Positions'].eq(1).groupby(df['Name']).transform('mean')
#alternative
#df['Winning %'] = (df.assign(new= df['Positions'].eq(1))
# .groupby('Name')['new']
# .transform('mean'))
print (df)
Date Name Positions Winning %
0 21-Mar John 1 0.666667
1 22-Apr John 2 0.666667
2 23-May John 1 0.666667
3 22-Apr Alex 2 0.000000
4 23-May Alex 2 0.000000
5 21-Mar Jeff 1 0.333333
6 22-Apr Jeff 8 0.333333
7 23-May Jeff 5 0.333333
8 22-Apr Randy 4 0.500000
9 23-May Randy 5 0.500000
10 23-Jun Randy 1 0.500000
11 24-Jul Randy 1 0.500000
使用第一个位置的sum()的另一个解决方案来划分每个组的len。
(
df.set_index('Name')
.assign(Winning_pct = df.groupby('Name').Place.apply(lambda x: x.eq(1).sum()/len(x)))
.reset_index()
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.