熊猫:根据返回数据创建索引时间序列[从100开始]

Cre*_*bit 3 python numpy pandas

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

图1:索引两个系列的示例

因此,例如2000年1月1日的第一个值设置为100,而2000年1月2日的下一个值设置为100 * exp(return_2000_01_02),依此类推。下面的例子:

表1:收益示例和索引时间序列

我知道我可以使用.iteritems()遍历 Pandas DataFrame中的行,如下面的SO问题所示: 遍历迭代

我也知道我可以将DataFrame转换为numpy数组,遍历该数组中的值,然后将numpy数组转换回Pandas DataFrame。该.as_matrix()方法,在此说明: http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.Series.html

一种更简单的方法是使用Pandas索引中记录的Python和numpy 索引运算符[]来对行进行迭代:http : //pandas.pydata.org/pandas-docs/stable/indexing.html

问题在于,所有这些解决方案(迭代项目除外)都在“ Pandas之外”工作,并且据我所读,效率低下。

有没有一种方法可以使用纯熊猫创建索引时间序列?如果没有,请建议最有效的方法。找到解决方案非常困难,因为索引和索引在Pandas中有特定的含义,但我这次不知道了。

Col*_*vel 5

您可以使用向量化方法来代替循环/迭代:

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
Run Code Online (Sandbox Code Playgroud)