Как заполнить все пропущенные часы для данных временного ряда для всех значений определенного столбца - PullRequest
0 голосов
/ 29 мая 2019

У меня есть набор данных временного ряда, который выглядит примерно так:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...