def period_by_hours(x, separation):
''' aggrege le x par intervale d'heure.
Le calcul pourrait être simple si on interdisait
le chevauchement de jour.
'''
print(separation)
assert isinstance(separation, list)
assert all([sep < 24 for sep in separation])
separation.sort()
if 0 in separation:
separation.append(24)
hour_categ = pd.cut(x.dt.hour, separation, right=False)
date_categ = x.dt.date
return date_categ.astype(str) + ' ' + hour_categ.astype(str)
else:
hour = x.dt.hour
hour_categ = pd.cut(hour, separation, right=False).astype(str)
night_categ = '[' + str(separation[-1]) + ', ' + str(separation[0]) + ')'
hour_categ[(hour < separation[0]) | (hour >= separation[-1])] = night_categ
assert hour_categ.nunique(dropna=False) == len(separation)
date_categ = x.dt.date.astype(str)
# décalage d'un jour pour les premières heures
decale = x.dt.date[x.dt.hour < separation[1]] + pd.DateOffset(days=-1)
date_categ[x.dt.hour < separation[1]] = decale.astype(str)
assert all(date_categ.str.len() == 10)
return date_categ + ' ' + hour_categ
### 4 - special
评论列表
文章目录