我有一个这样的DataFrame
df = pd.DataFrame( data = numpy_data, columns=['value','date'])
value date
0 64.885 2018-01-11
1 74.839 2018-01-15
2 41.481 2018-01-17
3 22.027 2018-01-17
4 53.747 2018-01-18
... ... ...
514 61.017 2018-12-22
515 68.376 2018-12-21
516 79.079 2018-12-26
517 73.975 2018-12-26
518 76.923 2018-12-26
519 rows × 2 columns
我想绘制value
与date
,而我正在使用它
df.plot( x='date',y='value')
我明白了
这里的要点是,此图有很多波动,我想对此加以缓解,我的想法是按日期间隔对值进行分组,并获得平均值,例如10天,即7月1日至7月10日之间的平均值,以及在7月5日创建点
很长的路要走,获取日期范围,用开始和结束日期分隔N个范围,使用日期过滤数据以计算平均值,然后放入其他DataFrame中。
有没有一种简短的方法?
PD:忽略峰
答案 0 :(得分:1)
例如,您可以做的一件事是使用DataFrame.rolling
和mean
来获取数据帧的滚动平均值:
df = df.set_index(df.date).drop('date', axis=1)
df.rolling(3).mean().plot()
对于您拥有的示例数据框,直接绘制数据框将导致:
采用滚动平均值,您将:
我在这里选择了window
中的3
,但是他的选择取决于您希望它有多平滑
答案 1 :(得分:0)
他的答案的问题是,滚动函数将值视为索引,而不是日期,通过一些转换,滚动可以将时间戳记用作使用时间作为窗口[pandas.rolling]
df = pd.DataFrame( data = numpy_data, columns=['value','date'])
df['date'] = df.apply(lambda row: pd.Timestamp(row.date), axis=1 )
df = df.set_index(df.date).drop('date', axis=1)
df.sort_index(inplace=True)
df.rolling('10d').mean().plot( ylim=(30,100) , figsize=(16,5),grid='true')
最终结果