En este artículo, veremos cómo calcular la mediana móvil en pandas.
Una métrica móvil generalmente se calcula en datos de series temporales. Representa cómo cambian los valores agregando los valores de las últimas ‘n’ ocurrencias. La ‘n’ se conoce como el tamaño de la ventana. La agregación suele ser la media o promedio simple. Sin embargo, también podemos usar la agregación de medianas para realizar ciertos tipos de análisis.
Antes de continuar, instalemos la biblioteca de panda usando pip:
pip install pandas
La función pandas.core.window.rolling.Rolling.median() calcula la mediana móvil. El objeto pandas.core.window.rolling.Rolling se obtiene aplicandoel método rolling() al marco de datos o serie.
Ejemplo 1:
En este ejemplo, usaremos la función pandas.core.window.rolling.Rolling.median() para calcular la mediana móvil del marco de datos dado. hemos calculado la mediana móvil para los tamaños de ventana 1, 2, 3 y 4. Hemos fusionado todas estas salidas de ventana diferentes en el marco de datos original para que podamos compararlas. Como podemos observar en la salida, para un tamaño de ventana de ‘n’, tenemos las primeras n-1 columnas como valor NaN. Para el registro 5, se considerarán los valores medianos del registro 2 – 5. Asimismo, para el registro 10 se considera el valor de la mediana de los registros entre 7 y 10. Este tamaño de ventana se puede definir en el método rolling() en el parámetro de ventana.
Python
# Import the `pandas` library import pandas as pd # Create the pandas dataframe df = pd.DataFrame({ "value": [101, 94, 112, 100, 134, 124, 119, 127, 143, 128, 141] }) # Calculate the rolling median for window = 1 w1_roll_median = df.rolling(window=1).median() # Calculate the rolling median for window = 2 w2_roll_median = df.rolling(window=2).median() # Calculate the rolling median for window = 3 w3_roll_median = df.rolling(window=3).median() # Calculate the rolling median for window = 4 w4_roll_median = df.rolling(window=4).median() # Add the rolling median series to the original # dataframe for comparison df['w1_roll_median'] = w1_roll_median df['w2_roll_median'] = w2_roll_median df['w3_roll_median'] = w3_roll_median df['w4_roll_median'] = w4_roll_median # Print the dataframe print(df)
Producción:
value w1_roll_median w2_roll_median w3_roll_median w4_roll_median 0 101 101.0 NaN NaN NaN 1 94 94.0 97.5 NaN NaN 2 112 112.0 103.0 101.0 NaN 3 100 100.0 106.0 100.0 100.5 4 134 134.0 117.0 112.0 106.0 5 124 124.0 129.0 124.0 118.0 6 119 119.0 121.5 124.0 121.5 7 127 127.0 123.0 124.0 125.5 8 143 143.0 135.0 127.0 125.5 9 128 128.0 135.5 128.0 127.5 10 141 141.0 134.5 141.0 134.5
Ejemplo 2:
En este ejemplo, hemos tomado el precio de las acciones de Tata Motors durante las últimas 3 semanas. La mediana móvil se calcula para un tamaño de ventana de 7, lo que significa un marco de tiempo de una semana. Por lo tanto, cada valor en la columna w7_roll_median representa el valor medio del precio de las acciones durante una semana. Dado que el tamaño de la ventana es 7, los 6 registros iniciales son NaN, como se mencionó anteriormente.
Python
# Import the `pandas` library import pandas as pd # Create the pandas dataframe df = pd.DataFrame({ "value": [ 506.40, 487.85, 484.90, 489.70, 501.40, 509.65, 510.75, 503.45, 507.05, 505.45, 519.05, 530.15, 509.70, 486.10, 495.50, 488.65, 492.75, 460.20, 461.45, 458.60, 475.25, ] }) # Calculate the rolling median for window = 7 w7_roll_median = df.rolling(window=7).median() # Add the rolling median series to the original # dataframe for comparison df['w7_roll_median'] = w7_roll_median # Print the dataframe print(df)
Producción:
value w7_roll_median 0 506.40 NaN 1 487.85 NaN 2 484.90 NaN 3 489.70 NaN 4 501.40 NaN 5 509.65 NaN 6 510.75 501.40 7 503.45 501.40 8 507.05 503.45 9 505.45 505.45 10 519.05 507.05 11 530.15 509.65 12 509.70 509.70 13 486.10 507.05 14 495.50 507.05 15 488.65 505.45 16 492.75 495.50 17 460.20 492.75 18 461.45 488.65 19 458.60 486.10 20 475.25 475.25
Publicación traducida automáticamente
Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA