0

我有看起来像这样的数据(称为返回的数据框)

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 = 整数。问题是我正在处理公共假期等,所以我的窗口长度不是固定的。

我只是在时间增量而不是长度上寻找相同的滚动逻辑。

4

1 回答 1

0

正如@Uvar 所提到的,pandas 数据框支持窗口声明中的偏移量。您需要创建数据框并将索引转换为日期时间格式。然后使用滚动功能

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
于 2017-09-19T00:23:11.777 回答