【问题标题】:How to group by hourly for each day of the week?如何按小时分组一周中的每一天?
【发布时间】:2021-10-15 19:38:19
【问题描述】:

我有一个带有日期时间和值列的长表。这是数据框的一个简短示例。我目前所做的是按小时、工作日、月份分组,我得到所有时间的月份或小时的平均值。

这是每小时值:hourly_value = df.groupby([lambda idx: idx.hour]).agg([np.mean, np.std])

    datetime                    value 
0   2018-01-01 00:30:00+01:00   0.22 
1   2018-01-01 00:35:00+01:00   0.31   
2   2018-01-02 00:30:00+01:00   1.15  
3   2018-01-02 00:35:00+01:00   1.80   
4   2018-01-03 00:30:00+01:00   2.60  
5   2018-01-03 00:35:00+01:00   2.30 
6   2018-01-04 00:30:00+01:00   1.90   
7   2018-01-04 00:35:00+01:00   2.10  
8   2018-01-05 00:30:00+01:00   2.90 

现在我想要的是每天的小时值。星期一每小时,星期二每小时,星期三每小时,...

有人可以帮我吗?:)

【问题讨论】:

    标签: python pandas datetime jupyter


    【解决方案1】:

    你可以试试:

    df.groupby(lambda idx: (idx[1].hour, idx[1].strftime("%A"))).agg([np.mean, np.std])
    

    输出:

                    value          
                     mean       std
    (0, Friday)     2.900       NaN
    (0, Monday)     0.265  0.063640
    (0, Thursday)   2.000  0.141421
    (0, Tuesday)    1.475  0.459619
    (0, Wednesday)  2.450  0.212132
    
    

    索引是(小时,工作日)对。

    但请注意,例如不同周的星期一归为一组。

    【讨论】:

    • 谢谢。是否可以先选择星期一然后绘制小时趋势?然后我将每隔一个工作日这样做。最后,我想要一个包含星期一、星期二等每个小时的列表。
    • 同样你可以groupby工作日的结果:grouped.groupby(lambda idx: idx[1])
    【解决方案2】:

    另一种计算方式:

    df.resample('1D', on='datetime').agg([np.mean, np.std])
    

    输出:

                           value
                 mean        std
    datetime        
    2017-12-31  0.265   0.063640
    2018-01-01  1.475   0.459619
    2018-01-02  2.450   0.212132
    2018-01-03  2.000   0.141421
    2018-01-04  2.900        NaN
    

    【讨论】:

    • 这给出了当天的值。我的目标是对每个星期一进行分组,并将当天每个小时的值进行分组。例如,我想查看价值在周五的表现趋势。
    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2019-10-15
    • 2021-11-06
    • 2021-07-14
    相关资源
    最近更新 更多