如何在 Python Pandas 数据帧上计算平滑移动平均值?

问题描述 投票:0回答:1

我有一个 pandas 数据框,想轻松计算平滑移动平均值。要计算简单移动平均线,您可以使用类似

df.iloc[:,1].rolling(window=3).mean()
的内容,而对于指数移动平均线,您可以使用类似
df_T.iloc[:,0].ewm(span=40,adjust=False).mean()
的内容。我可以做类似的事情来轻松计算平滑移动平均线吗?

python pandas finance moving-average
1个回答
0
投票

如果我们假设平滑移动平均线 SMA(又名 MMA)的公式为:

SMA(x) = SMA(x)*1/n + SMA(x-1)*(n-1)/n

您可以直接对系列值进行公式运算:

import numpy as np
def smma(series_in,n):
    size = len(series_in)
    series_out = pd.Series(np.zeros(size))
    series_out.index = series_in.index
    series_out[0] = series_in[0]
    for i in range(1,size):
        series_out[i] = series_in[i]*1/n + series_out[i-1]*(n-1)/n
    return series_out

window_size = 3
df['smma'] = smma(df[0], window_size)

我不相信这对于

pandas.DataFrame.rolling
是可能的,除非您进行自定义
pandas.DataFrame.rolling.apply
并自己添加扩展公式(作为
window_size
的函数)。

请注意,输出系列我分配与输入系列相同的索引,如果您将

numpy.ndarray
作为列连接到
pandas.DataFrame
并且您的行索引不是排序的整数,则可能会出现错误对齐数据。

© www.soinside.com 2019 - 2024. All rights reserved.