我有数据(称为返回的数据框),看起来像这样
DATE TICKER RETURN_DATA
2010-01-01 xxx 0.05
2010-01-01 yyy 0.01
2010-01-02 xxx 0.02
2010-01-02 yyy 0.08
.....
2010-01-29 xxx 0.11
2010-01-29 yyy 0.01
我尝试做的是计算4(n)周的滚动回报。
我实现了这个
def rolling_fct(returns, window_len):
return returns.groupby('TICKER')['RETURN_DATA'].rolling(window=window_len).apply(lambda x: np.prod(1+x)-1)
其中window_len = 28天,这是有效的,但我刚刚发现我需要在时间增量上滚动它,而不是使用window_len =整数。问题是我正在处理公共假期等问题,因此我的窗口长度不固定。
我正在寻找与时间增量而不是长度相同的滚动逻辑。
答案 0 :(得分:0)
如@Uvar所述,pandas dataframe支持窗口声明中的偏移量。您需要创建数据框并将索引转换为datetime格式。然后使用滚动功能
a
DATE TICKER RETURN_DATA
0 2010-01-01 xxx 0.05
1 2010-01-01 yyy 0.01
2 2010-01-02 xxx 0.02
3 2010-01-02 yyy 0.08
5 2010-01-29 xxx 0.11
6 2010-01-29 yyy 0.01
a.DATE = pd.to_datetime(a.DATE)
a.set_index('DATE', inplace=True)
a.rolling('2D').mean()
TICKER RETURN_DATA
DATE
2010-01-01 xxx 0.050000
2010-01-01 yyy 0.030000
2010-01-02 xxx 0.026667
2010-01-02 yyy 0.040000
2010-01-29 xxx 0.110000
2010-01-29 yyy 0.060000