Есть 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
Комментариев нет:
Отправить комментарий