如何在Pandas DataFrame上计算滚动累积乘积
我有一个时间序列的数据,里面包含了收益率、滚动贝塔值和滚动阿尔法值,这些数据都在一个pandas的DataFrame里。我想计算一下这个DataFrame中阿尔法值的滚动年化阿尔法(也就是想在Excel里用公式 =PRODUCT(1+[过去12个月])-1 的效果)。
SPX Index BBOEGEUS Index Beta Alpha
2006-07-31 0.005086 0.001910 1.177977 -0.004081
2006-08-31 0.021274 0.028854 1.167670 0.004012
2006-09-30 0.024566 0.009769 1.101618 -0.017293
2006-10-31 0.031508 0.030692 1.060355 -0.002717
2006-11-30 0.016467 0.031720 1.127585 0.013153
我很惊讶在pandas里没有内置的“滚动”函数来处理这个问题,但我希望有人能帮我写一个函数,这样我就可以用pd.rolling_apply来应用到df['Alpha']这一列上。
提前感谢你们的帮助。
5 个回答
8
如果你把那些 +/-1 的操作放到 df
之外,这样做会稍微快一点:
cumprod = (1.+df).rolling(window=12).agg(lambda x : x.prod()) -1
22
这样做可以吗?
import pandas as pd
import numpy as np
# your DataFrame; df = ...
pd.rolling_apply(df, 12, lambda x: np.prod(1 + x) - 1)