Python 熊猫-将滚动应用于列速度

Python 熊猫-将滚动应用于列速度,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据框架,其中我只取数值列的子集,计算每个数值列的5天滚动平均值,并将其作为新列添加到df中 这种方法可行,但目前需要相当长的时间(每列8秒)。我想知道是否有更好的方法 我目前正在做的工作示例: data = {'Group': ['A','A','A','A','A','A','B','B','B','B','B','C','C','C','C','C'], 'Year' : ['2017', '2017', '2017', '2018', '2018', '2018'

我有一个数据框架,其中我只取数值列的子集,计算每个数值列的5天滚动平均值,并将其作为新列添加到df中

这种方法可行,但目前需要相当长的时间(每列8秒)。我想知道是否有更好的方法

我目前正在做的工作示例:

data = {'Group': ['A','A','A','A','A','A','B','B','B','B','B','C','C','C','C','C'],
        'Year' : ['2017', '2017', '2017', '2018', '2018', '2018', '2017', '2017', '2018', '2018', '2017', '2017', '2017', '2017', '2018', '2018'],
        'Score 1' : [1,2,3,4,5,6,1,2,3,4,5,1,2,3,4,5],
       'Score 2': [1,4,5,7,5,5,6,1,4,5,6,7,4,6,4,6]}
df = pd.DataFrame(data)

for col in ['Score 1', 'Score 2']:
    df[col + '_avg'] = df.groupby(['Year', 'Group'])[col].apply(lambda x: x.rolling(2, 1).mean().shift().bfill())

对于任何使用此功能的人,我都能够通过先排序并避免lambda函数来显著加快速度:

return_df[col + '_avg'] = df.sort_values(['Group', 'Year']).groupby(['Group'])[col].rolling(2,1).mean().shift().values

gropby
功能非常“昂贵”。。尝试使用