熊猫-计算可变窗口大小的滚动累积产品

时间:2019-07-16 19:51:13

标签: python pandas dataframe

我有一些财务时间序列数据,我想计算窗口大小可变的滚动累积产品。

我要完成的工作是使用以下公式,但不是将窗口固定为12,而是要使用存储在标记为“ labels_y”的数据帧的最后一列中的值,该值会随着时间而变化。

df= (1 + df).rolling(window=12).apply(np.prod, raw=True) - 1

数据样本:

Out[102]: 
            div_yield  earn_variab    growth  ...     value  volatility  labels_y
date                                          ...                                
2004-02-23  -0.001847     0.003252 -0.001264  ...  0.004368   -0.004490       2.0
2004-02-24  -0.001668     0.007404  0.002108  ... -0.006122    0.008183       2.0
2004-02-25  -0.003272     0.004596  0.001283  ... -0.002057    0.005912       3.0
2004-02-26   0.001818    -0.003397 -0.003190  ...  0.001327   -0.003908       3.0
2004-02-27  -0.002838     0.009879  0.000808  ...  0.000350    0.010557       3.0
[5 rows x 11 columns]

,最终结果应类似于:

Out[104]: 
            div_yield  earn_variab    growth  ...     value  volatility  labels_y
date                                          ...                                
2004-02-23        NaN          NaN       NaN  ...       NaN         NaN       NaN
2004-02-24  -0.003512     0.010680  0.000841  ... -0.001781    0.003656       8.0
2004-02-25  -0.006773     0.015325  0.002125  ... -0.003834    0.009589      35.0
2004-02-26  -0.003126     0.008596  0.000193  ... -0.006851    0.010180      47.0
2004-02-27  -0.004294     0.011075 -0.001104  ... -0.000383    0.012559      63.0
[5 rows x 11 columns]

第1行和第2行使用2天的滚动窗口进行计算,第3、4和5行使用3天的窗口进行计算

我尝试使用

def get_window(row):
    return (1 + row).rolling(window=int(row['labels_y'])).apply(np.prod, raw=True) - 1

df = df.apply(get_window, axis=1)

我意识到计算错误方向的累积积。我正在努力使它起作用。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

{{1}}

这有用吗?效率极低,但除了繁琐的for循环外,我看不到其他方法。