如何使用pandas计算加权移动平均线

tha*_*the 8 python pandas

使用熊猫我可以计算

  • 简单移动平均SMA使用 pandas.stats.moments.rolling_mean
  • 指数移动平均线EMA使用 pandas.stats.moments.ewma

但是如何使用pandas 计算维基百科http://en.wikipedia.org/wiki/Exponential_smoothing中描述的加权移动平均值(WMA)?

是否有熊猫功能来计算WMA?

San*_*ord 14

使用熊猫,您可以使用以下方法计算加权移动平均值 (wma):
.rolling()结合.apply()

下面是一个具有 3 个权重和 window=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)
)
Run Code Online (Sandbox Code Playgroud)


请注意,在.rolling()我使用了 argument center=True
您应该检查这是否适用于您的用例或您是否需要center=False.


Wes*_*ney 6

不,没有该确切算法的实现。在此处创建了一个关于它的 GitHub 问题:

https://github.com/pydata/pandas/issues/886

我很乐意为此接受拉取请求——实现应该是简单的 Cython 编码并且可以集成到 pandas.stats.moments

  • 非常感谢。我正要向 github 添加一个功能请求。然后我看到http://pandas.pydata.org/community.html上的评论说先在这里问。 (2认同)