考虑以下值
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
我可以通过迭代(循环)解决方案实现目标,但是,如果数据深度和广度很大,那可能不是实际的解决方案。其次,有没有一种方法可以使我在多个列上一步完成?谢谢大家的指导。
答案 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]*