有什么快速功能可以在pandas数据帧中进行回溯计算吗?

时间:2014-07-30 05:45:04

标签: python pandas

我想实现一种计算方法,例如一个简单的场景

  

值计算为前N天的每日数据总和(在以下示例中设置N = 3)

Dataframe df :( df.index是'date')

date  value  
20140718  1  
20140721  2     
20140722  3     
20140723  4     
20140724  5     
20140725  6     
20140728  7  
......

做计算如下:

date  value  new  
20140718  1  0  
20140721  2  0      
20140722  3  0  
20140723  4  6 (3+2+1)  
20140724  5  9 (4+3+2)  
20140725  6  12 (5+4+3)     
20140728  7  15 (6+5+4) 
...... 

现在我已经使用了循环,如:

df['value']=[0]*len(df)
for idx in df.index  
    loc=df.index.get_loc(idx)
    if((loc-N)>=0):
        tmp=df.ix[df.index[loc-3]:df.index[loc-1]]
        sum=tmp['value'].sum()
    else:
        sum=0
    df['new'].ix(idx)=sum

但是,当数据帧的长度或N的值非常长/大时,这些计算将非常慢......我如何使用函数或其他方式更快地实现它? 此外,如果情景更复杂?怎么样 ?感谢。

1 个答案:

答案 0 :(得分:0)

由于你想要除前一个之前的三个之和,你可以在四个窗口上使用rolling_apply并总结除最后一个值以外的所有值。

new = rolling_apply(df, 4, lambda x:sum(x[:-1]), min_periods=4)

这与之后用三个窗口移动相同:

new = rolling_apply(df, 3, sum, min_periods=3).shift()

然后

df["new"] = new["value"].fillna(0)