Я бы не делал группировку подобным образом, вместо этого я делал бы двойную группировку / индексирование:
days = df.index.day_name()
times = df.index.time
df.groupby([days,times]).mean()
, что дает (head):
0
Friday 00:00:00 0.524322
00:05:00 0.857684
00:10:00 0.593461
00:15:00 0.755158
00:20:00 0.049511
где первый уровеньindex - это (строковые) имена дней, а индекс второго уровня - datetime
type.