在日期之间滚动累积产品

时间:2017-09-18 14:17:36

标签: python pandas datetime rolling-average

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

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

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

1 个答案:

答案 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