将每一天绘制为每小时的时间序列
Posted
技术标签:
【中文标题】将每一天绘制为每小时的时间序列【英文标题】:Plot each day as a time serie on a hourly basis 【发布时间】:2021-03-22 19:31:18 【问题描述】:我有一个时间序列数据框 (df),其中包含变量 y 几天的信息(每小时注册一次):
> df.head()
Date y
1 2019-10-03 00:00:00 33
2 2019-10-03 01:00:00 10
3 2019-10-03 02:00:00 39
4 2019-10-03 03:00:00 60
5 2019-10-03 04:00:00 21
我想将每一天绘制为一个时间序列,x 轴是小时,即我想每小时(独立地)查看每天的 y。如果我有 N 天,我想在示例图中看到 N 个时间序列,变量 y 在 y 轴上,小时在 x 轴上。这可能吗?
如果每天对我的数据进行分组,我会因为 sum 函数而丢失小时信息:
> df_day = df.groupby(pd.Grouper(key='Date',freq='1D')).sum()
Date y
0 2019-10-03 800
1 2019-10-04 899
2 2019-10-05 1020
3 2019-10-06 544
4 2019-10-07 321
【问题讨论】:
【参考方案1】:将DataFrame.groupby
与日期和时间一起使用,汇总总和并按Series.unstack
重塑:
df['Date'] = pd.to_datetime(df['Date'])
df_day = (df.groupby([df['Date'].dt.date, df['Date'].dt.hour])['y']
.sum()
.unstack(fill_value=0))
print (df_day)
Date 0 1 2 3 4
Date
2019-10-03 33 10 39 60 21
【讨论】:
谢谢,df_day.plot() 在你的代码得到我想要的之后。以上是关于将每一天绘制为每小时的时间序列的主要内容,如果未能解决你的问题,请参考以下文章
将每小时数据重新采样为每日数据并在 python 中的特定列上求和