Saltar al contenido

¿Cómo calculo un promedio móvil ponderado usando pandas?

Solución:

Usando pandas puede calcular un promedio móvil ponderado (wma) usando:
.rolling () combinado con .apply ()

Aquí hay un ejemplo con 3 pesos y ventana = 3:

data = {'colA': random.randint(1, 6, 10)}
df = pd.DataFrame(data)

weights = np.array([0.5, 0.25, 0.25])
sum_weights = np.sum(weights)

df['weighted_ma'] = (df['colA']
    .rolling(window=3, center=True)
    .apply(lambda x: np.sum(weights*x) / sum_weights, raw=False)
)

tenga en cuenta que en .rolling() He usado argumento center=True.
Debe comprobar si esto se aplica a su caso de uso o si necesita center=False.

No, no existe una implementación de ese algoritmo exacto. Creé un problema de GitHub al respecto aquí:

https://github.com/pydata/pandas/issues/886

Me complacería recibir una solicitud de extracción para esto: la implementación debe ser una codificación Cython sencilla y puede integrarse en pandas.stats.moments

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *