在日期之间滚动累积乘积
Rolling cumulative product between dates
我有这样的数据(名为 returns 的数据框)
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) 周滚动 returns。
我实现了这个
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 = 整数。问题是我正在处理 public 假期等,所以我的 window 长度不固定。
我只是在时间增量而不是长度上寻找相同的滚动逻辑。
如@Uvar 所述,pandas 数据帧支持 window 声明中的偏移量。您需要创建数据框并将索引转换为日期时间格式。然后使用滚动功能
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
我有这样的数据(名为 returns 的数据框)
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) 周滚动 returns。
我实现了这个
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 = 整数。问题是我正在处理 public 假期等,所以我的 window 长度不固定。
我只是在时间增量而不是长度上寻找相同的滚动逻辑。
如@Uvar 所述,pandas 数据帧支持 window 声明中的偏移量。您需要创建数据框并将索引转换为日期时间格式。然后使用滚动功能
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