pandas 0.22的滚动窗口函数pandas.DataFrame.rolling采用一个window参数,如下所述:
窗口:int或offset
移动窗口的大小。这是用于分析的观察数
计算统计数据。每个窗口都是固定大小的如果是偏移量,则这将是每个窗口的时间段。
每个窗口的大小将根据观察结果而变化
包括在时间段内。这仅对datetimelike有效
索引。这在0.19.0中是新的
在这种情况下,偏移量实际上是什么
简言之,如果您使用像“2D”(2天)这样的偏移量,pandas将使用索引中的日期时间信息(如果可用),可能会解释任何缺失行或不规则频率。但是,如果使用简单的int如2,则pandas将把索引视为简单的整数索引[0,1,2,…],并忽略索引中的任何日期时间信息
一个简单的例子应该说明这一点:
df=pd.DataFrame({'x':范围(4)},
指数=pd.截止日期时间(['1-1-2018','1-2-2018','1-4-2018','1-5-2018']))
x
2018-01-01 0
2018-01-02 1
2018-01-04 2
2018-01-05 3
请注意,(1)索引是日期时间,但(2)缺少“2018-01-03”。因此,如果使用2这样的纯整数,rolling将只查看最后两行,而不考虑日期时间值(从某种意义上讲,它的行为类似于iloc[i-1:i],其中i是当前行):
df.rolling(2.count)()
x
2018-01-01 1.0
2018-01-02 2.0
2018-01-04 2.0
2018-01-05 2.0
相反,如果使用2天的偏移量('2D'),滚动将使用实际的日期时间值,并解释日期时间索引中的任何异常情况
df.rolling('2D').count()
x
2018-01-01 1.0
2018-01-02 2.0
2018-01-04 1.0
2018-01-05 2.0
还要注意的是,在使用日期偏移量时,需要将索引按升序排序,但在使用简单整数时,这并不重要(因为您只是忽略了索引)