首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫的数据有什么快速的回溯计算功能吗?

熊猫的数据有什么快速的回溯计算功能吗?
EN

Stack Overflow用户
提问于 2014-07-30 05:45:03
回答 1查看 56关注 0票数 1

我想实现一个像这样的计算方法--一个简单的场景

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

Dataframe:(df.index是“日期”)

代码语言:javascript
复制
date  value  
20140718  1  
20140721  2     
20140722  3     
20140723  4     
20140724  5     
20140725  6     
20140728  7  
......

进行计算,如:

代码语言:javascript
复制
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) 
...... 

现在,我已经使用循环来完成此操作,例如:

代码语言:javascript
复制
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的值很长/很大时,这些计算将非常slow....How,我可以使用函数或其他方法更快地实现这一点吗?另外,如果情况更复杂呢?怎么做?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-07-30 12:27:13

因为您想要前三项之和(不包括当前值),所以可以在4的窗口上使用rolling_apply,并将除最后一个值之外的所有值加在一起。

代码语言:javascript
复制
new = rolling_apply(df, 4, lambda x:sum(x[:-1]), min_periods=4)

这就像在三人的窗口之后换车一样:

代码语言:javascript
复制
new = rolling_apply(df, 3, sum, min_periods=3).shift()

然后

代码语言:javascript
复制
df["new"] = new["value"].fillna(0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25029583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档