ローリングウィンドウ関数 pandas.DataFrame.rolling
of pandas 0.22は、次のように説明されるwindow
引数を取ります。
window:intまたはoffset
移動するウィンドウのサイズ。これは、統計の計算に使用される観測値の数です。各ウィンドウは固定サイズになります。
オフセットの場合、これは各ウィンドウの期間になります。各ウィンドウは、期間に含まれる観測に基づいてサイズが可変になります。これは、datetimelikeインデックスにのみ有効です。これは0.19.0の新機能です
このコンテキストで実際にoffsetとは何ですか?
一言で言えば、「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
また、日付オフセットを使用する場合は、インデックスを昇順で並べ替える必要がありますが、単純な整数を使用する場合は重要ではありません(とにかくインデックスを無視するだけなので)。