当尝试使用以下代码绘制熊猫的滚动平均值以平滑我的数据时,出现一个奇怪的外观图
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')
产生下图:
我希望图形变得“平滑”(我的目标是使用rolling_mean函数开始)。
任何帮助将非常感激 :)
更新:具有建议代码的图像
更新2:使用以下代码,我可以产生以下图像-关于如何将x轴固定为年份的任何想法?
data['mean_Kincaid'] = data.Kincaid.rolling(75, min_periods=1).mean()
data.plot(x='Date', y='mean_Kincaid')
当我使用以下代码运行它时,出现错误“ 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")
最佳答案
这不够平滑。
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'])
这个更好
df['mean_Kincaid'] = df.Kincaid.rolling(360, min_periods=1).mean()
df.plot(x='Date', y=['Kincaid', 'mean_Kincaid'])
注意较大的window参数。