我有一个数据框,其中包含日期作为索引和值列,用于存储连续日期(即索引中的日期)之间的增长百分比。假设我想计算真实的'通过在指数的第一个日期设置100个基础,然后迭代地应用增长百分比来计算值。使用cumprod方法很容易。
现在,我想将索引中的最新日期设置为100。因此,我需要为索引中的每个日期计算“倒数”。生长。使用熊猫有一种简单的方法(和pythonic)吗?
此致
Allia
答案 0 :(得分:5)
考虑数据帧df
,随机返回10天。
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
答案 1 :(得分:2)
颠倒,做cumprod,向后翻转:
dfci = df.iloc[::-1].cumprod().iloc[::-1]
适用于框架和系列。
答案 2 :(得分:1)
以防万一其他人到此为止,让我提供一个更通用的答案。
假设您的DataFrame列,系列,向量,等等,X
具有n
值。在任意位置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