【问题标题】: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

【问题讨论】:

    标签: python pandas matplotlib time-series pandas-groupby


    【解决方案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() 在你的代码得到我想要的之后。
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 2014-09-23
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2013-04-29
    相关资源
    最近更新 更多