将列添加到滚动应用函数
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.concat
与 shift
编辑的列一起使用
例如,如果您的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
列。
我有 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.concat
与 shift
编辑的列一起使用
例如,如果您的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
列。