es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Percentil móvil – Pandas

Este código proporciona los valores del percentil para una columna de abajo:

df[column].rank(pct=True)

Pero ¿hay alguna forma de obtener los valores del percentil móvil para una columna utilizando este método similar, sin escribir funciones, bucles o código más largo? Actualmente, cuando se agrega el código .rolling(window), no funciona.

Si no existe esta opción, Pandas necesita desesperadamente agregarla como una característica para el método .rolling(), ya que está disponible para el método .quantile(), no tiene sentido no tenerlo para los percentiles también.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En la última versión de Pandas (1.2.4), no existe un método incorporado para obtener los valores percentiles en movimiento de una columna utilizando el método df[column].rank(pct=True) junto con .rolling(window). Sin embargo, se podría lograr esta funcionalidad creando una función personalizada y aplicándola a la ventana móvil.

    Alternativamente, se podría utilizar el método rolling_apply junto con una función lambda que calcule los valores percentiles. Aquí tienes un ejemplo:

    import pandas as pd
    import numpy as np
    
    # Dataframe de ejemplo
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                       'B': [6, 7, 8, 9, 10]})
    
    # Define una función lambda para calcular los valores percentiles
    percentiles = lambda x: np.percentile(x, q=50)
    
    # Aplica el cálculo de los percentiles en movimiento a la columna A
    df['percentiles_en_movimiento'] = df['A'].rolling(window=3).apply(percentiles, raw=True)
    
    print(df)
    
    Resultado:
       A   B  percentiles_en_movimiento
    0  1   6                        NaN
    1  2   7                        NaN
    2  3   8                        2.0
    3  4   9                        3.0
    4  5  10                        4.0
    
    

    Esto crea una nueva columna llamada percentiles_en_movimiento que muestra los valores percentiles en movimiento (percentiles de orden 50) para la columna A. Observa que se incluye el argumento raw=True para que el resultado se devuelva como un array de numpy.

    Es importante tener en cuenta que el uso de rolling_apply con funciones lambda puede ser más lento que otros métodos, especialmente para dataframes más grandes o cálculos más complejos.

Comments are closed.