Cálculo de la media móvil ponderada utilizando el método de balanceo de pandas

Calculo media móvil simple:

def sma(data_frame, length=15): # TODO: Be sure about default values of length. smas = data_frame.Close.rolling(window=length, center=False).mean() return smas 

Usando la función de balanceo, ¿es posible calcular el promedio móvil ponderado? Mientras leo la documentación , creo que tengo que pasar el parámetro win_type . Pero no estoy seguro de cuál tengo que elegir.

Aquí hay una definición de media móvil ponderada.

Gracias por adelantado,

    Sí, esa parte de los pandas realmente no está muy bien documentada. Creo que es posible que tenga que usar rolling.apply () si no está utilizando uno de los tipos de ventana estándar. Lo toqué y conseguí que esto funcionara:

     >>> import numpy as np >>> import pandas as pd >>> d = pd.DataFrame({'a':range(10), 'b':np.random.random(size=10)}) >>> db = dbround(2) >>> d ab 0 0 0.28 1 1 0.70 2 2 0.28 3 3 0.99 4 4 0.72 5 5 0.43 6 6 0.71 7 7 0.75 8 8 0.61 9 9 0.14 >>> wts = np.array([-1, 2]) >>> def f(w): def g(x): return (w*x).mean() return g >>> d.rolling(window=2).apply(f(wts)) ab 0 NaN NaN 1 1.0 0.560 2 1.5 -0.070 3 2.0 0.850 4 2.5 0.225 5 3.0 0.070 6 3.5 0.495 7 4.0 0.395 8 4.5 0.235 9 5.0 -0.165 

    Creo que eso es correcto. El motivo del cierre es que la firma de rolling.apply es rolling.apply(func, *args, **kwargs) , por lo que los pesos se descomprimen en la tupla si los envía directamente a la función, a menos que los envíe como 1-tupla (wts,) , pero eso es raro.