【发布时间】:2020-06-12 02:29:57
【问题描述】:
我正在尝试在熊猫数据框中计算 Welles Wilder 的移动平均类型(也称为累积移动平均)。
计算“A”系列“n”个周期的怀尔德移动平均线的方法是:
- 计算“A”中前“n”个值的平均值,并将其设置为“n”位置的平均值。
- 对于以下值,使用以 (n-1) 加权的先前平均值和以 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)
【问题讨论】:
-
供参考,Pandas TA 项目已经实施了怀尔德的移动平均线。
标签: python pandas moving-average