在Pandas数据框中执行累积总计的最快方法

时间:2018-02-13 14:45:24

标签: python pandas iteration

我有一个高尔夫球手的大熊猫数据框'圆形分数可以追溯到2003年(约300000行)。它看起来像这样:

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

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

2008-01-01 ---菲尔·米克尔森----发明的比赛R1 --- 73 --- 108

我希望玩家总播放次数为'列是播放器在该日期播放的轮数(即数据帧中的实例)的总计。有一个快速的方法吗?我目前的解决方案(基本上使用iterrows然后是单行功能)工作正常,但需要大约11小时才能运行。

谢谢,

汤姆

1 个答案:

答案 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