簡體   English   中英

最近N天Pandas DataFrame TimeGrouper

[英]Last-N days Pandas DataFrame TimeGrouper


我得到了一個以日期為索引的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天總和運算。 是否可以執行此操作? 任何建議將不勝感激!

對於像這樣的簡單情況, 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應用的情況, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM