当尝试使用以下代码绘制熊猫的滚动平均值以平滑我的数据时,出现一个奇怪的外观图

data['mean_Kincaid'] = pd.rolling_mean(data.Kincaid,30, min_periods=1)
data['Year']= data['Date'].dt.year
data.plot(x='Date', y='mean_Kincaid')


产生下图:python - 滚动平均值数据绘制不正确-LMLPHP

我希望图形变得“平滑”(我的目标是使用rolling_mean函数开始)。

任何帮助将非常感激 :)

更新:具有建议代码python - 滚动平均值数据绘制不正确-LMLPHP的图像

更新2:使用以下代码,我可以产生以下图像-关于如何将x轴固定为年份的任何想法?

data['mean_Kincaid'] = data.Kincaid.rolling(75, min_periods=1).mean()
data.plot(x='Date', y='mean_Kincaid')


python - 滚动平均值数据绘制不正确-LMLPHP

当我使用以下代码运行它时,出现错误“ AttributeError:只能将datedlike值使用.dt访问器”谢谢!

更新3:

data['mean_Kincaid'] = data.Kincaid.rolling(10000,
min_periods=1).mean()
data.Date = pd.to_datetime(data.Date)
data.plot(x='Date', y='mean_Kincaid', legend=False, title="Kincaid
scores over time")


python - 滚动平均值数据绘制不正确-LMLPHP

最佳答案

这不够平滑。

n = 8001
df = pd.DataFrame(dict(
        Kincaid=np.sin(np.linspace(-4, 4, n)) + np.random.rand(n) * 2,
        Date=pd.date_range('2010-03-31', periods=n)
    ))

df['mean_Kincaid'] = df.Kincaid.rolling(30, min_periods=1).mean()

df.plot(x='Date', y=['Kincaid', 'mean_Kincaid'])


python - 滚动平均值数据绘制不正确-LMLPHP

这个更好

df['mean_Kincaid'] = df.Kincaid.rolling(360, min_periods=1).mean()

df.plot(x='Date', y=['Kincaid', 'mean_Kincaid'])


python - 滚动平均值数据绘制不正确-LMLPHP

注意较大的window参数。

07-26 03:01