我有一个数据框架,其中包含作为索引的日期和存储连续日期之间的增长百分比的值列(即索引中的日期)。假设我想通过在指数的第一个日期设置100个基数,然后迭代地应用增长%来计算“真实的”值。使用cumprod方法很容易。现在,我想设置为100基础上的最后日期的指数。因此,我需要为索引中的每个日期计算“逆”增长。有没有一个简单的方法(和pythonic)来做这与Pandas?致上,阿利亚
3df52oht1#
考虑 Dataframe df,随机返回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,然后除以最后一个值
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
9bfwbjaz2#
上下颠倒,做cumprod,翻转回来:
dfci = df.iloc[::-1].cumprod().iloc[::-1]
适用于框架和系列。添加关键字:反向电流
iecba09b3#
为了防止其他人在这里结束,让我提供一个更通用的答案。假设DataFrame列、Series、vector等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
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
3条答案
按热度按时间3df52oht1#
考虑 Dataframe
df
,随机返回10天。您希望使用
cumprod
,然后除以最后一个值9bfwbjaz2#
上下颠倒,做cumprod,翻转回来:
适用于框架和系列。
添加关键字:反向电流
iecba09b3#
为了防止其他人在这里结束,让我提供一个更通用的答案。
假设DataFrame列、Series、vector等
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