考虑使用dataframe
的简单pandas
示例:
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
),该结果也使用前一行计算。也就是说,我想将y[i+1]
计算为x[i+1]
和y[i]
的函数。例如:
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
所以我的问题是,是否有一种更惯用(更快)的方式来实现相同的结果?
答案 0 :(得分:1)
来自cumsum
的{{1}}解决了您的问题:
pandas
编辑:
确实非常好的问题,你可以通过开发df['y'] = df.x.cumsum()
In [171]: df
Out[171]:
x y
0 10 10
1 20 30
2 30 60
3 40 100
看到它是y1, y2, ...,yn
的增长多项式,其系数是sin(x)
的幂。我会通过遍历15
索引来选择此解决方案:
DataFrame