【问题标题】:Python Pandas: Cumulative Sum based on multiple conditionsPython Pandas:基于多个条件的累积和
【发布时间】:2017-11-09 10:50:57
【问题描述】:

我正在计算 Total ‘1st’ Position 列(下表)的值,并希望使用多个条件来执行此操作。

我希望总“第一”位置反映给定运动员赢得比赛的次数(截至给定日期)。

例如...如下所示,Steve 的第 1 总排名在以下情况下增加 1:Athlete = Steve 且 Position = 1。我想为所有运动员这样做。

我已经尝试了以下...

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

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

我做错了什么?

【问题讨论】:

  • 您能以文本格式发布您的数据框吗?

标签: python pandas


【解决方案1】:

你可以这样做:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢 :-) 作为下一步,我如何计算每个跑步者各自的累计比赛次数?
    • 改用.cumcount()df.groupby('Athlete').cumcount()
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2020-08-04
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多