如何从百分比变化时间序列构建索引?

时间:2018-08-15 09:33:27

标签: python pandas numpy

考虑以下值

array1 = np.array([526.59, 528.88, 536.19, 536.18, 536.18, 534.14, 538.14, 535.44,532.21, 531.94, 531.89, 531.89, 531.23, 529.41, 526.31, 523.67])

我将它们转换为熊猫系列对象

import numpy as np
import pandas as pd
df =  pd.Series(array1)

并将百分比变化计算为

df = (1+df.pct_change(periods=1))

从这里开始,我该如何构建一个索引(base = 100)?我想要的输出应该是:

0     100.00
1     100.43
2     101.82
3     101.82
4     101.82
5     101.43
6     102.19
7     101.68
8     101.07
9     101.02
10    101.01
11    101.01
12    100.88
13    100.54
14     99.95
15     99.45

我可以通过迭代(循环)解决方案实现目标,但是,如果数据深度和广度很大,那可能不是实际的解决方案。其次,有没有一种方法可以使我在多个列上一步完成?谢谢大家的指导。

2 个答案:

答案 0 :(得分:0)

据我所知,pct_change()仍然没有现成的expanding_window版本。您可以使用apply来避免for循环:

# generate data
import pandas as pd
series =  pd.Series([526.59, 528.88, 536.19, 536.18, 536.18, 534.14, 538.14, 535.44,532.21, 531.94, 531.89, 531.89, 531.23, 529.41, 526.31, 523.67])

# copmute percentage change with respect to first value
series.apply(lambda x: ((x / series.iloc[0]) - 1) * 100) + 100

输出:

0     100.000000
1     100.434873
2     101.823050
3     101.821151
4     101.821151
5     101.433753
6     102.193357
7     101.680624
8     101.067244
9     101.015971
10    101.006476
11    101.006476
12    100.881141
13    100.535521
14     99.946828
15     99.445489
dtype: float64

答案 1 :(得分:0)

索引(基数= 100)是序列相对于其第一个元素的相对变化。因此,当您可以直接通过以下方式获取相对变化时,无需绕开相对变化并从中重新计算索引

([ftp:]|[\.\.])*\/[\/]{0,1}([a-z0-9\.\/]*[a-z0-9]*)([\\.a-z0-9]+)([0-9a-zAz:]+)[@]*[\/?#]*([\\.\/a-z0-9:]+)?([?=]([^#]*))?[#a-zA-Z]*