TransWikia.com

python 3, pandas, DataFrame.rolling, Parametro center = True / False

Stack Overflow en español Asked by Ignacio Fuentealba on November 29, 2021

Soy totalmente ignorante en el tema y me gustaría saber una definición detallada – un ejemplo lo mas simple posible me serviría mucho – sobre el parametro center (booleano) cuando se usa la libreria Pandas de python 3 para hacer "moving window average".

Por ejemplo tengo un DataFrame (df) ccon un conjunto de datos ¿Cual es la diferencia de aplicarle rolling con center = True o False?.

df_true = df.rolling(window_size, center = True).mean()
df_false = df.rolling(window_size, center = False).mean()

Espero haber sido claro, no especifique los valores del DataFrame porque mi duda va mas por un tema de concepto, así que cualquier valores de ejemplo que ustedes me den me vendría bien. He googleado mucho y no he visto alguna definición clara. Espero que alguien pueda ayudarme, de ante mano muchas gracias.

One Answer

Creo haber llegado a un buen razonamiento. Al menos coincide con los resultados que printea Python cuando ejecuto el código. Favor corregir en caso de estar mal o de haber alguna imprecisión.

Ejemplo ilustrativo de funcionamiento.

df = DataFrame({'B': [0, 1, 2, 3, 4, 5]})

1. center = False y tamaño ventana 3:

Se parte la serie de datos en ventanas de largo "Tamaño ventana" para este ejemplo en particular el tamaño de la ventana sera 3.

La cantidad de ventanas resultantes es la misma que la cantidad de elementos del DataFrame df.

El primer elemento del DataFrame df es el ultimo elemento de la primera ventana, y al no existir los dos elementos anteriores se rellenan con valores NaN.

El segundo elemento del DataFrame df es el ultimo elemento de la segunda ventana y se rellena con los dos elementos anteriores. Así sucesivamente hasta llegar al ultimo elemento del DataFrame df que vendría estando en la ultima ventana.

Así quedaría a modo gráfico, donde el resultado de cada ventana (Vx) es el promedio de los números que contiene:

df = pd.DataFrame({'B': [0, 1, 2, 3, 4, 5]})
rolleado = df.rolling(3, center = False).mean()
print(rolleado)
exit()

V1: NaN, NaN, 0 = NaN

V2: NaN, 0, 1 = NaN

V3: 0, 1, 2 = 1

V4: 1,2,3 = 2

V5: 2,3,4 = 3

V6: 3,4,5 = 4

2. center = True Tamaño ventana 3:

Tamaño ventana / 2 : 3/2 = 1 (aproximado hacia abajo)

Cuando center es True quiere decir que cada elemento del DataFrame df es es el elemento central de cada ventana y se le agrega (tamaño ventana /2) elemento a la izquierda y (tamaño ventana /2) a la derecha. En este ejemplo es 3/2 = 1, por ende se le agrega 1 elemento a la izquierda y un 1 a la derecha.

Para la primera ventana al no existir un elemento a la izquierda del primer elemento del DataFrame df (0) se rellena con NaN. El elemento de la derecha viene siendo el siguiente de la serie del DataFrame df, es decir el 1.

Para la segunda ventana el elemento central es el siguiente del DataFrame df es decir el (1).

y asi sucesivamente hasta llegar al ultimo elemento del DataFrame df es decir el (5).

Así quedaría a modo gráfico, donde el resultado de cada ventana (Vx) es el promedio de los números que contiene:

df = pd.DataFrame({'B': [0, 1, 2, 3, 4, 5]})
rolleado = df.rolling(3, center = True).mean()
print(rolleado)
exit()

V1: NaN, 0, 1 = NaN

V2: 0,1,2 = 1

V3: 1,2,3 = 2

V4: 2,3,4 = 3

V5: 3,4,5 = 4

V6: 4,5,NaN = NaN

Answered by Ignacio Fuentealba on November 29, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP