#python #pandas #dataframe #group_by
Есть 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?
Ответы
Ответ 1
Исходный 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
Комментариев нет:
Отправить комментарий