Использование groupby или pivot_tables для преобразования кадра данных - PullRequest
0 голосов
/ 04 мая 2020

У меня есть фрейм данных, который состоит из меток времени (в час), которые должны быть сгруппированы каждые 5 строк с количеством дождей в час. Проблема в этой ситуации заключается в том, что некоторые временные метки, которые должны быть сгруппированы, имеют разные даты, например, некоторые временные метки go в течение полуночи. Мой оригинал df:

           Datum            HH  DayPrecipitation
9137    2016-01-16 18:00:00 18  0
9138    2016-01-16 19:00:00 19  6
9139    2016-01-16 20:00:00 20  0
...         ...             ... ...
44874   2020-02-13 19:00:00 19  0
44875   2020-02-13 20:00:00 20  0
44878   2020-02-13 23:00:00 23  0

Я бы хотел, чтобы это в широком формате выглядело примерно так:

Где отметка времени 1-5 - это каждые 5 строк предыдущего и значения берутся из df['DayPrecipitation']

       Datum               timestamp1   timestamp2 ... timestamp 5
    2016-01-16                  0            6              0
    2020-02-13                  0            0              0

Я не уверен, как go об этом, так как группировка по дате не даст мне нужные мне результаты, но я не знаю, чтобы группировать каждые 5 строк. Помощь будет высоко ценится! Спасибо!

1 Ответ

0 голосов
/ 04 мая 2020

Я бы сначала пересчитал кадр данных с частотой '5H'. Затем добавьте 2 столбца: один для даты и один для метки времени, которая является часом, деленным (целочисленным делением) на 5. С этого момента pivot даст ожидаемый кадр данных.

Я предполагаю, что здесь столбец Datum содержит истинную метку времени. Если он содержит другой тип, вам придется изменить его на df['Datum'] = pd.to_datetime(df['Datum']). Код может быть:

df5 = df[['Datum', 'DayPrecipitation']].resample('5H', on='Datum').sum().reset_index()
df5['timestamp'] = df5['Datum'].dt.hour // 5
df5['Datum'] = df5['Datum'].dt.date
resul = df5.pivot('Datum', 'timestamp', 'DayPrecipitation')

Но каждый 5-й день будет иметь только 4 метки времени, поэтому 5-й будет иметь значение NaN.

...