Python 滚动加权移动平均法

Python 滚动加权移动平均法,python,pandas,Python,Pandas,我找遍了stackoverflow,找不到适合我的东西 我在计算滚动窗口的加权移动平均值 方程式为: #weighted average temp with smoothing factor, a #T_w = sum[k=1,24](a^(k-1)*T(t-k)) / sum[k=1,24]a^(k-1) 看起来很简单,但我需要将此平均值应用于滚动窗口。我可以做滚动平均(简单移动平均): 但现在我只想对我平均的窗口应用权重。 Python的.ewm()没有切中要害,因为我希望权重只适用于

我找遍了stackoverflow,找不到适合我的东西

我在计算滚动窗口的加权移动平均值

方程式为:

 #weighted average temp with smoothing factor, a
 #T_w = sum[k=1,24](a^(k-1)*T(t-k)) / sum[k=1,24]a^(k-1)
看起来很简单,但我需要将此平均值应用于滚动窗口。我可以做滚动平均(简单移动平均):

但现在我只想对我平均的窗口应用权重。 Python的.ewm()没有切中要害,因为我希望权重只适用于我正在“滚动”的窗口

我发现了一些代码片段,它们似乎可以工作,但组件失败了:

from functools import partial

window = 13
alpha = 1-ln(2)/3    # This is ewma's decay factor.
weights = list(reversed([(1-alpha)**n for n in range(window)]))
ewma = partial(average, weights=weight)
rolling_average = series.rolling(window).apply(ewma)
在这里,我遇到的问题是partial()如何调用average()——这是在这里介绍的——但我还不能评论(newb),我不知道该从何说起

我已经实施了另一个解决方案,但它不能完全满足我的需要:

alpha = 0.1    # This is my smoothing parameter
weights = list(reversed([(1-alpha)**n for n in range(window)]))
def f(w):
    def g(x):
        return (w*x).mean()
    return g
T_ = pd.DataFrame()
T_ = temps['T'].rolling(window=24).apply(f(weights))
根据此处提出的解决方案: 这种方法的问题是它计算平均值,而我需要这样的有效方法:

return (w*x).sum() / w.sum()
但这不起作用,因为

AttributeError: 'list' object has no attribute 'sum'
如何使用指定的窗口(此处为过去24小时)和指定的平滑参数a(仅适用于过去24小时)计算滚动加权移动平均数?

而不是
返回(w*x).sum()/w.sum()
,尝试
求和(w*x)/sum(w)
。这将使您至少通过
属性错误


sum
是一个Python内置程序,它可以处理任何可以求和的iterable对象(即可以与
+
一起添加的对象)。这些对象的示例包括
int
float
等。

谢谢。回来说我也发现了。德普,很高兴你找到了解决办法!如果你觉得这个有用,介意向上投票吗?你有没有考虑过的权重属性?
AttributeError: 'list' object has no attribute 'sum'