python - Pandas:从返回数据创建索引时间序列 [从 100 开始]

标签 python numpy pandas

我有关于 Pandas DataFrame 中变量的对数返回的数据。我想将这些返回转化为从 100(或任意数字)开始的索引时间序列。这种操作非常常见,例如在创建通货膨胀指数或比较两个不同幅度的系列时:

Pic 1: Example of indexing two series

因此,例如,2000 年 1 月 1 日的第一个值设置为等于 100,2000 年 1 月 2 日的下一个值等于 100 * exp(return_2000_01_02) 等等。示例如下:

Table 1: Example of returns and an indexed time series

我知道我可以使用 .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/

相关文章:

python - python中的变化点检测

python - 使用 python 正则表达式的词标记化

python - 如何使用来自 mpl_toolkits.basemap.cm 的颜色图创建离散颜色条?

python - IO错误 : Can't read data (Can't open directory) - Missing gzip compression filter

python - 如何在 Python 中对列表或元组进行 'unpack'

python - 如何使用给定坐标在图像中绘制一个点

python - 按列标题排列 DataFrame 列

python - NLP:如何搜索带有括号的字符串?

python - pandas 从数据框中提取列表

python - 使用生成器迭代 Mongo 中的大型集合