Python 在数据框中进行累计总计的最快方法

Python 在数据框中进行累计总计的最快方法,python,pandas,iteration,Python,Pandas,Iteration,我有一个关于2003年高尔夫球手回合得分的数据框架(大约300000排)。它看起来像这样: 日期----高尔夫球手----锦标赛----得分----球员总回合数 2008-01-01---老虎伍兹----发明锦标赛R1---72---50 2008-01-01---菲尔·米克尔森----发明了锦标赛R1---73---108 我希望“玩家已玩的总回合数”列是一个玩家截至该日期已玩的回合数(即数据帧中的实例)的运行总数。有没有快速的方法?我目前的解决方案(基本上使用iterrows,然后使用单行函

我有一个关于2003年高尔夫球手回合得分的数据框架(大约300000排)。它看起来像这样:

日期----高尔夫球手----锦标赛----得分----球员总回合数

2008-01-01---老虎伍兹----发明锦标赛R1---72---50

2008-01-01---菲尔·米克尔森----发明了锦标赛R1---73---108

我希望“玩家已玩的总回合数”列是一个玩家截至该日期已玩的回合数(即数据帧中的实例)的运行总数。有没有快速的方法?我目前的解决方案(基本上使用iterrows,然后使用单行函数)工作正常,但运行大约需要11小时

谢谢

汤姆

这里有一种方法:

df = df.sort_values('Date')
df['Rounds CumSum'] = df.groupby('Golfer')['Rounds'].cumsum()
例如:

import pandas as pd

df = pd.DataFrame([['A', 70, 50],
                   ['B', 72, 55],
                   ['A', 73, 45],
                   ['A', 71, 60],
                   ['B', 74, 55],
                   ['A', 72, 65]],
                  columns=['Golfer', 'Rounds', 'Played'])

df['Rounds CumSum'] = df.groupby('Golfer')['Rounds'].cumsum()

#   Golfer  Rounds  Played  Rounds CumSum
# 0      A      70      50             70
# 1      B      72      55             72
# 2      A      73      45            143
# 3      A      71      60            214
# 4      B      74      55            146
# 5      A      72      65            286

这是否也符合问题中的“截至该日期”标准?我猜如果索引是datetime排序的,那么should@Arnaud,我的回答是假设您先按日期排序。我已经在答案中添加了这个,谢谢。非常感谢!问题解决了!你知道我如何计算一个高尔夫球手在过去n天的平均回合数吗?@TomDry,没问题。如果有效,请随意接受(在左边打勾)。对于下一个问题,我建议你单独问一个问题:)。啊,当然。都做完了。这是一个新问题: