我正在尝试按照本教程来计算SMA:https://www.datacamp.com/community/tutorials/moving-averages-in-pandas
我想获取所有值的SMA,但我只得到5。我在框架中有17个要获取其值的值。如果增加滚动窗口,我将完全没有获得SMA的任何值,那是为什么?
感谢您的帮助,因为我是熊猫的新手
def example(self):
frame = {'date': ['2017-06-19', '2017-06-16', '2017-06-15', '2017-06-14', '2017-06-13', '2017-06-12', '2017-06-09', '2017-06-08', '2017-06-07', '2017-06-06', '2017-06-05', '2017-06-02', '2017-06-01', '2017-05-31'], 'indexes': ['146.3400', '142.2700', '144.2900', '145.1600', '146.5900', '145.4200', '148.9800', '154.9900', '155.3700', '154.4500', '153.9300', '155.4500', '153.1800', '152.7600']}
df = pd.DataFrame(frame)
df['SMA'] = df.iloc[:, 1].rolling(window=4).mean()
print(df.head())
输出:
date indexes SMA
0 2017-06-19 146.3400 NaN
1 2017-06-17 142.2700 NaN
2 2017-06-16 144.2900 NaN
3 2017-06-15 145.1600 144.5150
4 2017-06-14 146.5900 144.5775
答案 0 :(得分:0)
在计算移动平均线时,您需要n
个样本,它是移动窗口的大小。由于设置了window=4
,因此需要4个样本来计算平均值。就是说,这些NaN
值仅表明,此时,没有足够的数据来计算窗口大小= 4的MA。
答案 1 :(得分:0)
如果必须始终在4的窗口中计算滚动平均值,则需要使用'NA'
删除结果。但是,如果您只是想在没有足够观察值的情况下计算滚动平均值,则可以使用df[column_name].rolling(window=4, min_periods=1)
之类的方法。但是请注意,这不是适当的滚动方式。这是一个例子。
# Dummy data
df = pd.DataFrame(dates, columns=['Date'])
df['Counts'] = [16, 6, 8, 5, 15, 7]
# Calculate rolling mean with min_preriods=1
df['rolling_mean'] = df.Counts.rolling(window=4, min_periods=1).mean()
print(df)
输出:
Date Counts rolling_mean
0 2020-01-01 16 16.00
1 2020-01-02 6 11.00
2 2020-01-03 8 10.00
3 2020-01-04 5 8.75
4 2020-01-05 15 8.50
5 2020-01-06 7 8.75
NA
值df.Counts.rolling(window=4).mean().dropna()
## Output
# 3 8.75
# 4 8.50
# 5 8.75
# Name: Counts, dtype: float64
NA
值说,您想用NA
替换所有0
值。这就是您需要做的。
df.Counts.rolling(window=4).mean().fillna(0)
## Output
# 0 0.00
# 1 0.00
# 2 0.00
# 3 8.75
# 4 8.50
# 5 8.75
# Name: Counts, dtype: float64