gpt4 book ai didi

python - 滚动加权移动平均 Pandas

转载 作者:行者123 更新时间:2023-12-01 01:37:40 24 4
gpt4 key购买 nike

我在 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)

看起来很简单,但我需要将此平均值应用于滚动窗口。我可以做滚动平均(简单移动平均):

 T_ = pd.DataFrame()
T_ = temps['T'].rolling(window=24).mean()

但现在我只想对我要平均的窗口应用权重。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()——这是在这里介绍的——Create a rolling custom EWMA on a pandas dataframe - 但我还不能发表评论(新手),而且我不知道该去哪里。

我已经实现了另一个解决方案,但它并没有完全满足我的需要:

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))

基于此处建议的解决方案:Calculating weighted moving average using pandas Rolling method这种方法的问题在于它计算平均值,而我实际上需要这样的东西:

return (w*x).sum() / w.sum()

但这不起作用,因为

AttributeError: 'list' object has no attribute 'sum'

如何计算具有指定窗口(此处为过去 24 小时)和指定平滑参数 a(仅适用于过去 24 小时)的滚动加权移动平均线?

最佳答案

尝试使用 sum(w*x)/sum(w),而不是 return (w*x).sum()/w.sum()。这至少会让你克服AttributeError

sum 是一个 Python 内置函数,适用于任何可以求和的可迭代持有对象(即可以使用 + 相加的添加对象)。这些对象的示例包括 intfloat 等。

关于python - 滚动加权移动平均 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com