web-dev-qa-db-ja.com

pandasローリングウィンドウと日時インデックス:「オフセット」とはどういう意味ですか?

ローリングウィンドウ関数 pandas.DataFrame.rolling of pandas 0.22は、次のように説明されるwindow引数を取ります。

window:intまたはoffset

移動するウィンドウのサイズ。これは、統計の計算に使用される観測値の数です。各ウィンドウは固定サイズになります。

オフセットの場合、これは各ウィンドウの期間になります。各ウィンドウは、期間に含まれる観測に基づいてサイズが可変になります。これは、datetimelikeインデックスにのみ有効です。これは0.19.0の新機能です

このコンテキストで実際にoffsetとは何ですか?

9
ascripter

一言で言えば、「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は、日時の値に関係なく、最後の2行を見るだけです(ある意味では、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

また、日付オフセットを使用する場合は、インデックスを昇順で並べ替える必要がありますが、単純な整数を使用する場合は重要ではありません(とにかくインデックスを無視するだけなので)。

11
JohnE