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)