Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Получение строки значений из groupby

Есть DataFrameGroupby со следующими данными:
last vol datetime 2013-07-23 10:00:00 112450 49 2013-07-23 10:00:00 112440 67 2013-07-23 10:00:00 112430 93 2013-07-23 10:00:00 112420 52 2013-07-23 10:00:00 112410 63
last vol datetime 2013-07-23 10:01:00 112690 17 2013-07-23 10:01:00 112680 59 2013-07-23 10:01:00 112670 226 2013-07-23 10:01:00 112660 184 2013-07-23 10:01:00 112650 289
Сгруппированные по уровню индекса:
blocks_group = datetime_group.groupby(level=0)
Как получить целую строку из каждой группы с максимальным значением, а не только значения столбца vol?


Ответ

Исходный DataFrame:
In [47]: df Out[47]: last vol datetime 2018-08-31 10:00:00 112450 49 2018-08-31 10:00:00 112440 67 2018-08-31 10:00:00 112430 93 2018-08-31 10:00:00 112420 52 2018-08-31 10:00:00 112410 63 2018-08-31 10:01:00 112690 17 2018-08-31 10:01:00 112680 59 2018-08-31 10:01:00 112670 226 2018-08-31 10:01:00 112660 184 2018-08-31 10:01:00 112650 289
Решение:
In [48]: df.groupby(level=0, as_index=False).apply(lambda x: x.nlargest(1, 'vol')) Out[48]: last vol datetime 0 2018-08-31 10:00:00 112430 93 1 2018-08-31 10:01:00 112650 289
Ещё один, менее идиоматичный, вариант:
In [51]: df.sort_values('vol').groupby(level=0).tail(1) Out[51]: last vol datetime 2018-08-31 10:00:00 112430 93 2018-08-31 10:01:00 112650 289

Комментариев нет:

Отправить комментарий