我有关于 Pandas DataFrame 中变量的对数返回的数据。我想将这些返回转化为从 100(或任意数字)开始的索引时间序列。这种操作非常常见,例如在创建通货膨胀指数或比较两个不同幅度的系列时:
因此,例如,2000 年 1 月 1 日的第一个值设置为等于 100,2000 年 1 月 2 日的下一个值等于 100 * exp(return_2000_01_02) 等等。示例如下:
我知道我可以使用 .iteritems() 遍历 Pandas DataFrame 中的行,如这个 SO 问题中所示: iterating row by row through a pandas dataframe
我还知道我可以将 DataFrame 转换为一个 numpy 数组,遍历该数组中的值并将 numpy 数组转换回 Pandas DataFrame。 .as_matrix() 方法解释如下: http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.Series.html
一种更简单的方法是使用 Python 和 numpy 索引运算符 [] 迭代行,如 Pandas 索引中所述: http://pandas.pydata.org/pandas-docs/stable/indexing.html
问题是所有这些解决方案(迭代项除外)都在“外部”Pandas 工作,并且根据我所读的内容,效率低下。
有没有一种方法可以使用纯 Pandas 创建索引时间序列?如果没有,请您提出最有效的方法。找到解决方案出奇地困难,因为索引和索引在 Pandas 中有特定的含义,而我这次不是。
最佳答案
您可以使用矢量化方法代替循环/迭代:
import pandas as pd
import numpy as np
df = pd.DataFrame({'return':np.array([np.nan, 0.01, -0.02, 0.05, 0.07, 0.01, -0.01])})
df['series'] = 100*np.exp(np.nan_to_num(df['return'].cumsum()))
#In [29]: df
#Out[29]:
# return series
#0 NaN 100.000000
#1 0.01 101.005017
#2 -0.02 99.004983
#3 0.05 104.081077
#4 0.07 111.627807
#5 0.01 112.749685
#6 -0.01 111.627807
关于python - Pandas:从返回数据创建索引时间序列 [从 100 开始],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36153944/