繁体   English   中英

Python Pandas:基于多个条件的累积总和

[英]Python Pandas: Cumulative Sum based on multiple conditions

我正在计算“ 总第1个排名”列(如下表)的值,并希望使用多个条件进行此操作。

我希望“ 总第一名”能够反映给定运动员赢得比赛的次数(截至给定的一天)。

例如,...在以下情况下,看到史蒂夫的第一位置总和增加1:运动员=史蒂夫,位置=1。我想为所有运动员做到这一点。

在此处输入图片说明

我尝试了以下方法...

df['Total 1st Position'] = ((df['Position'] == '1') & (df['Athlete'] == df['Athlete'])).cumsum()

...但这仅返回df ['Position'] =='1'的运行次数的总和

我究竟做错了什么?

创建一个临时列以指示获胜,然后在.cumsum上使用.groupby

df['won'] = (df['Position'] == '1') * 1
df['Total 1st Position'] = df.groupby('Athlete').won.cumsum()

您可以这样操作:

df = your_file

df.loc[(df['Position'] == 1), 'firsts'] = 1
df=df.fillna(0)

df['Total 1st Position'] = (df['firsts']*df['Position']).groupby(df['Athlete']).cumsum()

如果我们以此运行您的数据框,则会得到以下信息:

   Race Day Athlete  Position  firsts  Total 1st Position
0     Day 1   Steve         1     1.0                 1.0
1     Day 1    Jane         2     0.0                 0.0
2     Day 1    Bill         3     0.0                 0.0
3     Day 2    Bill         1     1.0                 1.0
4     Day 2   Steve         2     0.0                 1.0
5     Day 2    Jane         3     0.0                 0.0
6     Day 3    Jane         1     1.0                 1.0
7     Day 3    Bill         2     0.0                 1.0
8     Day 3   Steve         3     0.0                 1.0
9     Day 4   Steve         1     1.0                 2.0
10    Day 4    Jane         2     0.0                 1.0
11    Day 4    Bill         3     0.0                 1.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM