Cre*_*bit 3 python numpy pandas
我有关于Pandas DataFrame中变量的对数返回的数据。我想将这些收益转换为从100(或任何任意数字)开始的索引时间序列。例如,在创建通胀指数或比较两个不同幅度的序列时,这种操作非常普遍:
因此,例如2000年1月1日的第一个值设置为100,而2000年1月2日的下一个值设置为100 * exp(return_2000_01_02),依此类推。下面的例子:
我知道我可以使用.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中有特定的含义,但我这次不知道了。
您可以使用向量化方法来代替循环/迭代:
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)