【问题标题】:pandas rolling window & datetime indexes: What does `offset` mean?熊猫滚动窗口和日期时间索引:“偏移”是什么意思?
【发布时间】:2018-07-29 01:15:48
【问题描述】:

pandas 0.22 的滚动窗口函数pandas.DataFrame.rolling 采用window 参数,描述如下:

窗口:整数或偏移量

移动窗口的大小。这是用于观察的数量 计算统计量。每个窗口的大小都是固定的。

如果它是一个偏移量,那么这将是每个窗口的时间段。 每个窗口的大小将根据观察结果变化 包含在时间段内。这仅对 datetimelike 有效 索引。这是 0.19.0 中的新功能

在这种情况下,偏移实际上是什么?

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    简而言之,如果您使用像“2D”(2 天)这样的offset,pandas 将使用索引中的日期时间信息(如果可用),可能会考虑任何缺失的行或不规则的频率。但是如果你使用简单的int 像 2,那么 pandas 会将索引视为简单的整数索引 [0,1,2,...] 并忽略索引中的任何日期时间信息。

    一个简单的例子应该可以清楚地说明这一点:

    df=pd.DataFrame({'x':range(4)}, 
        index=pd.to_datetime(['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'),rolling 将使用实际的日期时间值并说明日期时间索引中的任何不规则情况。

    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
    

    另请注意,使用日期偏移量时,您需要按升序对索引进行排序,但使用简单整数时并不重要(因为您只是忽略了索引)。

    【讨论】:

    • 以微秒为单位给出偏移量(比如10),将使用什么字符串?,我试过'10f',没用
    • @Legolas 这个信息出奇地难以找到,尽管在这种情况下猜测通常很有效;-) 我会使用“我们”,但“微”或“微秒”也应该有效。更多信息请看这里:pandas.pydata.org/pandas-docs/stable/reference/api/…
    • @JohnE 该文档没有像示例中那样提到小写的d,只有days。但似乎只有2d 有效,而2days 无效(?)。
    • @thakis 感谢您注意到这一点。我不太确定为什么“天”在这里不起作用。在其他情况下,您可以通过其他方式指定天数的偏移量(例如尝试pd.Timedelta('2days')),但我也无法在这里工作“天数”。 FWIW,我认为'D'可能是在这里指定“天”的最标准或最规范的方式,所以我将上面的示例更改为使用2D而不是2d
    • @thakis 这可能有点傻,但是如果您出于某种原因真的想使用“天”,您可以这样做,通过显式转换为时间增量:df.rolling(pd.Timedelta('2days')).count()
    猜你喜欢
    • 2020-11-18
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2020-01-31
    • 2019-10-21
    • 2017-03-30
    相关资源
    最近更新 更多