我正在尝试在panda数据框中计算Welles Wilder类型的移动平均(也称为累积移动平均)。
计算'A'系列的Wilder移动平均值的方法如下: - 计算"A"中前'n'个值的平均值,并将其设置为第'n'个位置的平均值。 - 对于以下值,使用(n-1)加权的先前平均值和加权后的当前系列值,并将所有值除以'n'。
我的问题是:如何以向量化的方式实现这一点?
我尝试迭代数据框(不建议这样做,因为速度慢)。它能工作,值是正确的,但我会收到一个错误信息:
SettingWithCopyWarning: 正在尝试设置DataFrame片段的副本上的值
这可能不是最有效的方法。
我的代码如下:
计算'A'系列的Wilder移动平均值的方法如下: - 计算"A"中前'n'个值的平均值,并将其设置为第'n'个位置的平均值。 - 对于以下值,使用(n-1)加权的先前平均值和加权后的当前系列值,并将所有值除以'n'。
我的问题是:如何以向量化的方式实现这一点?
我尝试迭代数据框(不建议这样做,因为速度慢)。它能工作,值是正确的,但我会收到一个错误信息:
SettingWithCopyWarning: 正在尝试设置DataFrame片段的副本上的值
这可能不是最有效的方法。
我的代码如下:
import pandas as pd
import numpy as np
#Building Random sample:
datas = pd.date_range('2020-01-01','2020-01-31')
np.random.seed(693)
A = np.random.randint(40,60, size=(31,1))
df = pd.DataFrame(A,index = datas, columns = ['A'])
period = 12 # Main parameter
initial_mean = A[0:period].mean() # Equation for the first value.
size = len(df.index)
df['B'] = np.full(size, np.nan)
df.B[period-1] = initial_mean
for x in range(period, size):
df.B[x] = ((df.A[x] + (period-1)*df.B[x-1]) / period) # Equation for the following values.
print(df)