[英]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.