Используя панд, вы можете рассчитать взвешенное скользящее среднее, используя .rolling () в сочетании с .apply () .
Вот пример с 3 весами и окном = 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)
)
Обратите внимание, что в .rolling () я использовал аргумент center = True.Вы должны проверить, относится ли это к вашему сценарию использования или нужно ли center = False.