首页 > 解决方案 > 如何在 pandas 中生成更快的滑动窗口功能?

问题描述

我有一个数据集,如:

 Region  Product  Date        Order
 North   A        1/1/2019    10 
 North   A        1/2/2019    11
 ....
 North   A        1/29/2019   1
 North   A        1/30/2019   150

我正在使用循环创建滞后功能(以前的日期顺序):

temp_df = pd.DataFrame()

for k in df['Region'].unique():
    temp_df2 = df[df['Region']==k]
    for j in temp_df2['Product'].unique():
         temp_df3 = temp_df2[temp_df2['Product']==j]
         for i in range(28,56):
             temp_df3['lag_{}'.format(-i)] = temp_df3['Order'].shift(i).fillna(0)
             temp_df = temp_df.append(temp_df3)

运行这个嵌套循环的时间很长。如何更快地预处理数据?提前致谢!

预期输出:

 Region  Product  Date        Order    Lag_28   Lag_29
 North   A        1/1/2019    10       N/A      N/A
 ....
 North   A        1/30/2019   150      11       10

标签: python-3.xpandas

解决方案


使用groupby会更快(更清洁):

groups = df.groupby(['Region', 'Product'])['Order']

for i in range(28,56):
    df[f'Lag_{i}'] = groups.shift(i)

推荐阅读