Pandas 熊猫数据帧组(按每周小时)

Pandas 熊猫数据帧组(按每周小时),pandas,time-series,Pandas,Time Series,我有一个数据框,其中包含一所房子(ID)的每小时千瓦时能耗(消耗),持续时间为几个月,例如: ID Consumption DateTime 2016-07-01 01:00:00 1642 0.703400 2016-07-01 02:00:00 1642 0.724033 2016-07-01 03:00:00 1642 0.747300 2016-07-0

我有一个数据框,其中包含一所房子(ID)的每小时千瓦时能耗(消耗),持续时间为几个月,例如:

                      ID  Consumption
DateTime                              
2016-07-01 01:00:00  1642     0.703400
2016-07-01 02:00:00  1642     0.724033
2016-07-01 03:00:00  1642     0.747300
2016-07-01 04:00:00  1642     0.830450
2016-07-01 05:00:00  1642     0.704917
2016-07-01 06:00:00  1642     0.708467
2016-07-01 07:00:00  1642     0.806533
2016-07-01 08:00:00  1642     0.774483
2016-07-01 09:00:00  1642     0.724833
2016-07-01 10:00:00  1642     0.721900
2016-07-01 11:00:00  1642     0.729450
2016-07-01 12:00:00  1642     0.757233
2016-07-01 13:00:00  1642     0.744667
这里DateTime是类型的索引。我的目标是找出一周中每小时的平均消耗量和方差,即(24*7=168小时)

我试过了

print (df.groupby(df.index.week)['Consumption'].transform('mean'))

然而,这并没有给出正确的结果,如何在大熊猫身上做到这一点?任何帮助都将不胜感激。

我认为您需要带有and的
groupby
,但需要添加
1
,因为两者中的第一个值都是
0
。然后聚集
平均值

df1 = (df.groupby((df.index.dayofweek + 1) * (df.index.hour + 1))['Consumption'].mean()
        .rename_axis('HourOfWeek')
        .reset_index())
print (df1)
    HourOfWeek  Consumption
0           10     0.703400
1           15     0.724033
2           20     0.747300
3           25     0.830450
4           30     0.704917
5           35     0.708467
6           40     0.806533
7           45     0.774483
8           50     0.724833
9           55     0.721900
10          60     0.729450
11          65     0.757233
12          70     0.744667

即使迟到:我也有类似的问题,我不认为上面的答案是正确的,应该是正确的

df.groupby((df.index.dayofweek) * 24 + (df.index.hour)).mean().rename_axis('HourOfWeek')

在上面提到的答案中,由于指定的组不是唯一的,因此您最终会得到不需要的组合,例如,周一下午2点与周二上午1点一起分组,等等。

df.groupby(df.index.dayofweek*df.index.hour)['consumpion'].transform('mean')
?@fabhof的答案应该是正确的,但这确实是错误的。
df.groupby((df.index.dayofweek) * 24 + (df.index.hour)).mean().rename_axis('HourOfWeek')