【问题标题】:how to construct an index from percentage change time series?如何从百分比变化时间序列构建指数?
【发布时间】:2018-08-15 09:33:27
【问题描述】:

考虑以下值

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

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

【问题讨论】:

  • sipmply df = pd.Series(array1)/array1[0]*100 有什么问题?
  • 没有错。它只是缺乏创造力:)。这个解决方案可能是最简单和最有效的。谢谢。

标签: python pandas numpy


【解决方案1】:

索引 (base=100) 是一系列相对于其第一个元素的相对变化。因此,当您可以直接获取时,无需绕道相对变化并从中重新计算索引

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

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2014-02-02
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多