La función de ventana móvil pandas.DataFrame.rolling
de pandas 0.22 toma un argumento de window
que se describe a continuación:
ventana : int, o offset
- Cómo eliminar filas de Pandas DataFrame cuyo valor en ciertas columnas es NaN
- ¿Cómo obtener el índice común de dos marcos de datos pandas?
- Ordenar todas las columnas de un dataframe
- establecer la diferencia para los pandas
- Uniendo pandas dataframes por nombre de columna
Tamaño de la ventana móvil. Este es el número de observaciones utilizadas para calcular la estadística. Cada ventana tendrá un tamaño fijo.
Si es un desplazamiento, este será el período de tiempo de cada ventana. Cada ventana tendrá un tamaño variable según las observaciones incluidas en el período de tiempo. Esto solo es válido para índices de datos similares. Esto es nuevo en 0.19.0
¿Qué es realmente un desplazamiento en este contexto?
En pocas palabras, si usa un offset
como “2d” (2 días), los pandas usarán la información de fecha y hora en el índice (si está disponible), lo que posiblemente tenga en cuenta las filas faltantes o las frecuencias irregulares. Pero si usa un int
simple como 2, entonces pandas tratará el índice como un índice entero simple [0,1,2, …] e ignorará cualquier información de fecha y hora en el índice.
Un simple ejemplo debería dejar esto claro:
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
Tenga en cuenta que (1) el índice es una fecha y hora, pero también (2) falta ‘2018-01-03’. Por lo tanto, si utiliza un entero llano como 2, la rolling
solo mirará las dos últimas filas, independientemente del valor de fecha y hora (en un sentido, se comporta como iloc[i-1:i]
donde i
es la fila actual):
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
A la inversa, si utiliza un desplazamiento de 2 días ( '2d'
), la rolling
utilizará los valores de fecha y hora reales y cualquier irregularidad en el índice de fecha y hora.
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
Además, tenga en cuenta que necesita que el índice se clasifique en orden ascendente cuando se usa un desplazamiento de fecha, pero no importa al usar un entero simple (ya que de todos modos simplemente está ignorando el índice).