熊猫:累积功能应用程序

时间:2015-10-04 14:16:02

标签: python pandas dataframe

考虑使用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

所以我的问题是,是否有一种更惯用(更快)的方式来实现相同的结果?

1 个答案:

答案 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