Группировка панды по временному интервалу + агрегатная функция - PullRequest
1 голос
/ 03 октября 2019

Допустим, у меня есть такая панда:

2010-01-01 04:10:00:025     69
2010-01-01 04:10:01:669     1
2010-01-01 04:10:03:027     3
2010-01-01 04:10:04:003     8
2010-01-01 04:10:05:987     10
2010-01-01 04:10:06:330     99
2010-01-01 04:10:08:369     55
2010-01-01 04:10:09:987     5000
2010-01-01 04:10:11:148     13

И мне нужно преобразовать ее в следующий формат:

2010-01-01 04:10:00:000     69      69
2010-01-01 04:10:05:000     5000    10
2010-01-01 04:10:10:000     13      13

Первый столбец соответствует каждому 5-секундному интервалуначиная с 2010-01-01 04: 10: 00: 000.

Второй столбец - это максимум всех сгруппированных строк.

Третий столбец является первым из всех сгруппированных строк.

Как я могу получить это?

Ответы [ 2 ]

3 голосов
/ 03 октября 2019

Если вы имеете в виду 5 seconds, мы можем использовать pd.Grouper с agg и min, first:

# use this line if your first column is not datetime type yet.
# df['col1'] = pd.to_datetime(df['col1'], format='%Y-%m-%d %H:%M:%S:%f')

df.groupby(pd.Grouper(key='col1', freq='5s'))['col2'].agg(['max', 'first']).reset_index()

Выход

                 col1   max  first
0 2010-01-01 04:10:00    69     69
1 2010-01-01 04:10:05  5000     10
2 2010-01-01 04:10:10    13     13

Примечание: поскольку вы не указали имена столбцов, я назвал их col1, col2

1 голос
/ 03 октября 2019

Я предполагаю, что ваш первый столбец называется datetime: date_time, а ваш второй столбец в 'value'. Чтобы достичь своей цели, вы можете использовать « resample », чтобы

   df.set_index('date_time').resample("5s").agg(['max','min'])

* заметка. Я использовал 5 секунд, потому что ваши данные не показывали 5 минут

* 1009. * результат
                             value
                             max     min
      date_time     
      2010-01-01 04:10:00    69      1
      2010-01-01 04:10:05    5000    10
      2010-01-01 04:10:10    13      13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...