我有一个高尔夫球手的大熊猫数据框'圆形分数可以追溯到2003年(约300000行)。它看起来像这样:
日期----高尔夫球手---锦标赛-----得分---球员总轮数
2008-01-01 ---老虎伍兹----发明赛事R1 --- 72 --- 50
2008-01-01 ---菲尔·米克尔森----发明的比赛R1 --- 73 --- 108
我希望玩家总播放次数为'列是播放器在该日期播放的轮数(即数据帧中的实例)的总计。有一个快速的方法吗?我目前的解决方案(基本上使用iterrows然后是单行功能)工作正常,但需要大约11小时才能运行。
谢谢,
汤姆
答案 0 :(得分:2)
这是一种方式:
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