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

2024-04-18 04:14:38 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下值

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

我可以通过迭代(循环)解决方案来实现目标,但如果数据深度和广度都很大,那可能不是一个实际的解决方案。第二,有没有一种方法可以让我在多个列上一步完成这个任务?谢谢大家的指导。你知道吗


Tags: 对象importnumpypandasdfasnp解决方案
2条回答

据我所知,pct\u 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

指数(基数=100)是一系列相对于第一个元素的相对变化。因此,当您可以直接通过

df = pd.Series(array1)/array1[0]*100

相关问题 更多 >