考虑一个使用pandas
的简单dataframe
示例:
df = pd.DataFrame({'x' : [10, 20, 30, 40]}, index = ['0','1','2', '3'])
这将得到以下结果:
index x
0 10
1 20
2 30
3 40
我试图获取x
的值,并通过一个lambda
为每一行生成一个结果,该结果还利用了前一行的计算。也就是说,我想根据x[i+1]
和y[i]
的值来计算y[i+1]
。例如:
y[i+1] = sin(x[i+1]) + (15 * y[i])
所以这将会得到以下的 DataFrame:
index x y
0 10 -0.54
1 20 -7.2
2 30 -109.7
3 40 -1644.7
对于第一行,这可能是一个特殊情况(因为没有y[-1]
)?所以我想给它一个具体的数字。
我一直在尝试使用expanding_apply
来解决这个问题,但是没有成功。谢谢。
更新
所以我通过以下方式回答了我的问题(感谢下面的帮助):
df.loc[:,'y'] = 0
initial_y_val = 10
for i in range (0, df.shape[0]):
if i == 0 : df.iloc[0,1] = initial_y_val + df.iloc[0,0]
else : df.iloc[i,1] = df.iloc[i,0] + df.iloc[(i-1),1]
print df
这将会得到:
x y
0 10 20
1 20 40
2 30 70
3 40 110
所以我的问题是,是否有更加惯用(和更快)的方法来实现相同的结果?