У меня есть набор данных временного ряда, который выглядит примерно так:
ds y uuid
2019-01-01 00:01 1.5 abc
2019-01-01 01:11 1.2 def
...
содержит точные данные минут, тогда как ни каждая минута, ни час временного ряда не завершены.
Итак, я хочу сделать данные ежечасно и, следовательно, заполнить все пропущенные значения часов для каждого uuid
, чтобы мои данные выглядели так:
ds y uuid
2019-01-01 01:00 1.5 abc
.
.
.
2019-01-01 24:00 1.7 abc
...
2019-01-01 01:00 1.2 def
.
.
.
2019-01-01 24:00 1.6 def
...
Я знаю, как заполнить пропущенные часы, если я урежу данные до одного uuid
, например:
def fill_missing_hours(df):
df = df.sort_index()
start = df.head(1).index.date[0]
end = df.tail(1).index.date[0]
end = end + datetime.timedelta(days=1)
print('filling hours from {} to {}'.format(start,end))
all_hours = pd.to_datetime(pd.date_range(start=start, end=end, freq='1H'))
all_hours_df = pd.DataFrame({'date': all_hours.date})
all_hours_df['hour'] = all_hours.hour
df['hour'] = df.index.hour
df['date'] = df.index.date
df = df.reset_index().merge(all_hours_df, how='outer', on = ['date','hour'])
df.groupby(['date', 'hour']).mean().reset_index()
df['ds'] = pd.to_datetime(df['date'].astype(str)+ df['hour'].astype(str), format = '%Y-%m-%d%H')
df = df.fillna(method='ffill').fillna(method='bfill').drop(df.tail(1).index)
return df
но как я могу заполнить все пропущенные часы для каждого uuid
, чтобы набор данных содержал полные hourly
данные для каждого uuid
?