簡體   English   中英

熊貓滾動窗口和日期時間索引:“偏移”是什么意思?

[英]pandas rolling window & datetime indexes: What does `offset` mean?

pandas 0.22 的滾動窗口函數pandas.DataFrame.rolling接受一個window參數,其描述如下:

窗口:整數,或偏移量

移動窗口的大小。 這是用於計算統計量的觀察數。 每個窗口的大小都是固定的。

如果它是一個偏移量,那么這將是每個窗口的時間段。 每個窗口的大小都將根據時間段中包含的觀察結果而變化。 這僅對類似日期時間的索引有效。 這是 0.19.0 中的新功能

在這種情況下,偏移實際上是什么?

簡而言之,如果您使用諸如“2D”(2 天)之類的offset ,pandas 將使用索引中的日期時間信息(如果可用),可能會考慮任何丟失的行或不規則的頻率。 但是,如果您使用像 2 這樣的簡單int ,那么 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

另請注意,使用日期偏移量時,您需要按升序對索引進行排序,但使用簡單整數時並不重要(因為您只是忽略了索引)。

似乎這僅在您有單個索引時才有效,似乎不適用於多個索引? 有沒有其他人有類似的問題?

暫無
暫無

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

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