如何在一周中的每一天按小时分组?

How to group by hourly for each day of the week?

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

这是每小时值: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 

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

有人可以帮我解决这个问题吗?:)

你可以试试:

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

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

但请注意e.x。不同周的星期一被分成一组。

另一种计算方式:

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