La fonction de fenêtre déroulante pandas.DataFrame.rolling
sur pandas 0,22 prend un argument window
qui est décrit comme suit:
fenêtre : int ou offset
Taille de la fenêtre mobile. Il s'agit du nombre d'observations utilisées pour calculer la statistique. Chaque fenêtre aura une taille fixe.
Si c'est un décalage, ce sera la période de temps de chaque fenêtre. Chaque fenêtre sera de taille variable en fonction des observations incluses dans la période. Ceci n'est valable que pour les index datetimelike. C'est nouveau dans 0.19.0
Qu'est-ce qu'un offset dans ce contexte?
En bref, si vous utilisez un offset
comme "2d" (2 jours), pandas utilisera les informations datetime dans l'index (si disponible), ce qui pourrait potentiellement représenter tout lignes manquantes ou fréquences irrégulières. Mais si vous utilisez un simple int
comme 2, alors pandas traitera l'index comme un simple indice entier [0,1,2, .. .] et ignorer toutes les informations datetime de l'index.
Un exemple simple devrait clarifier ceci:
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
Notez que (1) l'index est un datetime, mais aussi (2) il manque '2018-01-03'. Donc, si vous utilisez un entier simple comme 2, rolling
ne fera que regarder les deux dernières lignes, quelle que soit la valeur datetime (dans un sens, il se comporte comme iloc[i-1:i]
où i
est la ligne courante):
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
Inversement, si vous utilisez un décalage de 2 jours ('2d'
), rolling
utilisera les valeurs datetime réelles et rend compte de toute irrégularité dans l'index datetime.
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
Notez également que vous devez trier l'index dans l'ordre croissant lorsque vous utilisez un décalage de date, mais cela n'a pas d'importance lorsque vous utilisez un simple entier (puisque vous ignorez tout simplement l'index de toute façon).