熊猫-无法计算移动平均值

时间:2020-07-29 21:27:39

标签: python python-3.x pandas

我正在尝试按照本教程来计算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

2 个答案:

答案 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