最近N天的Pandas DataFrame TimeGrouper

时间:2015-11-09 16:08:30

标签: python pandas group-by dataframe

我有一个DataFrame,其日期为索引,我想进行操作"获取最近2天的总和"在每一天:

            A
2015-11-01  1
2015-11-02  3
2015-11-03  2
2015-11-04  4
2015-11-05  1
2015-11-06  2

目标是:

       Lastest_2_days_A
2015-11-01  1
2015-11-02  4   
2015-11-03  5
2015-11-04  6
2015-11-05  5
2015-11-06  3

我认为TimeGrouper可能有所帮助。但是当我使用TimeGrouper并将freq设置为" 2D":

import numpy as np 
import pandas as pd 

rng = pd.date_range('2015-11-01', periods=6)
df = pd.DataFrame(np.random.randn(6,1), index=rng, columns=["A"]).applymap(lambda x:int(x))
df.groupby(pd.TimeGrouper(freq="2D", closed='right')).sum()

结果将是:

            A
2015-10-30  1
2015-11-01  5
2015-11-03  5
2015-11-05  2

很明显,在TimeGrouper中,结果中的索引之间没有任何重叠,而我需要的是每天执行最新的N天总和操作。有可能做这个操作吗?任何建议都将非常感谢!

1 个答案:

答案 0 :(得分:0)

对于这样的简单案例,shift就足够了:

In [6]:

print df

            A
2015-11-01  1
2015-11-02  3
2015-11-03  2
2015-11-04  4
2015-11-05  1
2015-11-06  2

In [7]:

print df + df.shift(1).fillna(0)

            A
2015-11-01  1
2015-11-02  4
2015-11-03  5
2015-11-04  6
2015-11-05  5
2015-11-06  3

更一般地说,这是rolling apply的情况,min_periods控制将被视为有效的最小窗口。在这种情况下跳过它将导致第一个单元格nan

In [8]:

print pd.rolling_sum(df,window=2,min_periods=1)

            A
2015-11-01  1
2015-11-02  4
2015-11-03  5
2015-11-04  6
2015-11-05  5
2015-11-06  3