Группировка, в кадре данных на основе значения индекса (часовая метка времени) - когда индекс прерывается - PullRequest
0 голосов
/ 10 ноября 2018

Я работаю над фреймом данных, и мне нужно сгруппировать строки на основе значения индекса. Индекс представляет собой часовую метку времени, но бывает, что некоторые конкретные часы не находятся в кадре данных (поскольку они не удовлетворяют определенному условию). Поэтому мне нужно сгруппировать все непрерывные часы, и, если определенный час отсутствует, должна быть создана другая группа.

Изображение ниже описывает, чего я хочу достичь:

enter image description here

Timestamp   Value
1/2/2017 1:00   231.903601
1/2/2017 2:00   228.225897
1/2/2017 7:00   211.998416
1/2/2017 8:00   227.219204
1/2/2017 9:00   229.203123
1/3/2017 6:00   237.907033
1/3/2017 7:00   206.684276
1/3/2017 8:00   228.4801

Выходные данные должны быть (Дата начала-окончания и среднее значение):

     Timestamp                    Avg_Value
    1/2/2017 1:00-1/2/2017 2:00    230.06
    1/2/2017 7:00-1/2/2017 9:00    222.8
    1/3/2017 6:00-1/3/2017 8:00    224.35

Не могли бы вы помочь мне с выходом, сделайте это с кадрами данных Python? Спасибо,

1 Ответ

0 голосов
/ 10 ноября 2018

Сначала преобразовать в Timestamp.

Затем сформируйте группы, взяв кумулятивную сумму Серии, которая проверяет, не является ли разница во времени 1 часом. Используйте .agg, чтобы получить соответствующие вычисления для каждого столбца.

import pandas as pd

df['Timestamp'] = pd.to_datetime(df.Timestamp, format='%m/%d/%Y %H:%M')
s = df.Timestamp.diff().bfill().dt.total_seconds().ne(3600).cumsum()

df.groupby(s).agg({'Timestamp': ['min', 'max'], 'Value': 'mean'}).rename_axis(None, 0)

Выход:

            Timestamp                           Value
                  min                 max        mean
0 2017-01-02 01:00:00 2017-01-02 02:00:00  230.064749
1 2017-01-02 07:00:00 2017-01-02 09:00:00  222.806914
2 2017-01-03 06:00:00 2017-01-03 08:00:00  224.357136
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...