小编bea*_*cub的帖子

滚动加权移动平均熊猫

我搜索了 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)
Run Code Online (Sandbox Code Playgroud)

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

 T_ = pd.DataFrame()
 T_ = temps['T'].rolling(window=24).mean()
Run Code Online (Sandbox Code Playgroud)

但现在我只想对我要平均的窗口应用权重。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)
Run Code Online (Sandbox Code Playgroud)

在这里,我遇到的问题是partial()如何调用average()——这是在这里介绍的——在pandas数据帧上创建滚动自定义EWMA——但我还不能发表评论(新手),而且我不'不知道该去哪里。

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

alpha = 0.1    # This is my smoothing parameter
weights = list(reversed([(1-alpha)**n for n in range(window)]))
def f(w): …
Run Code Online (Sandbox Code Playgroud)

python pandas

3
推荐指数
1
解决办法
5426
查看次数

apply vs nested for循环

我正在尝试在python中构建一个填充了1和0的数据帧,具体取决于一列中的数字:

Date        Hour
2005-01-01  1
2005-01-01  2
2005-01-01  3
2005-01-01  4
Run Code Online (Sandbox Code Playgroud)

我想根据"小时"中的数字创建新列,如果该行等于"小时"中的值,则填充每列1,否则填充0.

Date        Hour HE1 HE2 HE3 HE4
2005-01-01  1    1   0   0   0
2005-01-01  2    0   1   0   0
2005-01-01  3    0   0   1   0
2005-01-01  4    0   0   0   1
Run Code Online (Sandbox Code Playgroud)

我可以使用此代码执行此操作,但需要很长时间:

for x in range(1,5):
    _HE = 'HE' + str(x)
    for i in load.index:
        load.at[i, _HE] = 1 if load.at[i,'Hour']==x else 0
Run Code Online (Sandbox Code Playgroud)

我觉得这对于.apply()来说是一个很棒的应用程序(没有双关语),但我无法让它正常工作.

你会如何加快速度?

python apply pandas

2
推荐指数
1
解决办法
90
查看次数

标签 统计

pandas ×2

python ×2

apply ×1