Pandas中的“逆”cumprod

5

我有一个数据框,其中包含日期作为索引,并且一个值列存储在索引中的连续日期之间(即日期)的增长百分比。假设我想通过将第一个日期的基数设为100,然后迭代地应用增长百分比来计算“实际”值。使用cumprod方法很容易。

现在,我想将最后一个日期在索引中设为100基准。因此,我需要计算索引中每个日期的“反向”增长率。是否有一种简单的方式(并且Python风格良好),可以使用Pandas进行此操作?

谢谢,

Allia

3个回答

6
倒过来,做累积乘积,再翻回来:
dfci = df.iloc[::-1].cumprod().iloc[::-1]

适用于帧和系列。

添加一个关键词:reverse cumprod


6
考虑包含10天随机回报的数据框df
np.random.seed([3,1415])
tidx = pd.date_range('2012-04-01', periods=10)
df = pd.DataFrame(dict(A=np.random.rand(10) / 10), tidx)

df

                   A
2012-04-01  0.044494
2012-04-02  0.040755
2012-04-03  0.046015
2012-04-04  0.046524
2012-04-05  0.046269
2012-04-06  0.001655
2012-04-07  0.085045
2012-04-08  0.081774
2012-04-09  0.077796
2012-04-10  0.075798

你想要使用 cumprod 然后再除以最后一个值。
dcum = df.add(1).cumprod()
dcum.div(dcum.iloc[-1]).mul(100)

                     A
2012-04-01   61.539104
2012-04-02   64.047157
2012-04-03   66.994277
2012-04-04   70.111111
2012-04-05   73.355090
2012-04-06   73.476459
2012-04-07   79.725230
2012-04-08   86.244715
2012-04-09   92.954225
2012-04-10  100.000000

2

以防其他人也会来到这里,让我提供一个更通用的答案。

假设你的DataFrame列、Series、向量或其他任何东西,Xn个值。在任意位置i,你想要获取

(X[i])*(X[i+1])*...*(X[n]),

这相当于

(X[1])*(X[2])*...*(X[n]) / (X[1])*(X[2])*...*(X[i-1])

因此,您可以这样做:

inverse_cumprod = (np.prod(X) / np.cumprod(X)) * X


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接