将列添加到滚动应用函数

Add columns to a rolling-apply function

我有 daily_data 这样的数据:

                 Close
Date
2022-06-01  148.710007
2022-05-31  148.839996
2022-05-27  149.639999
2022-05-26  143.779999
2022-05-25  140.520004
2022-05-24  140.360001
2022-05-23  143.110001
2022-05-20  137.589996
2022-05-19  137.350006
2022-05-18  140.820007
...

然后我进行滚动百分比变化计算,sampleStr = '180 D':

dfSeries = daily_data['Close'].rolling(resampleStr).apply(lambda x : (x[0] - x[-1])/x[0])

如果我打印这个我得到这个:

Date
2022-06-01    0.000000
2022-05-31   -0.000874
2022-05-27   -0.006254
2022-05-26    0.033152
2022-05-25    0.055074
2022-05-24    0.056150
2022-05-23    0.037657
2022-05-20    0.074776
2022-05-19    0.076390
2022-05-18    0.053056
2022-05-17   -0.003564
2022-05-16    0.021317
2022-05-13    0.010759
2022-05-12    0.041356
2022-05-11    0.014861
2022-05-10   -0.039002

但是,我想为此添加 columns 以进行完整性检查,我想添加 x[0] 的日期(我认为实际上已经存在),日期x[-1]x[0] 的收盘价以及 x[-1] 的收盘价,到 dfSeries

我该怎么做?

看来您只需要将 pd.concatshift 编辑的列一起使用

例如,如果您的window是3,您可以

pd.concat([df['Close'].rolling(3).apply(lambda x : (x[0] - x[-1])/x[0]).reset_index(), 
           df.reset_index()['Date'].shift(-3).rename('Date in T-3'), 
           df.reset_index()['Close'].shift(-3).rename('Close in T-3')], 
           axis=1
           )

这意味着您正在串联三个对象。第一个,就是你原来提供的结果post;第二个,移位的 Date 列;最后一个,移动的 Close 列。