Как выбрать всю строку с максимальным значением в одном столбце для каждой группы?
Имеется общий df приблизительно следующего вида:
df po oh io yh qw er ty yu io
id 09 09 87 89 12 23 34 45 1
id 09 09 87 89 12 23 34 2
id 09 09 87 89 12 23 35 3
id 09 09 87 89 12 23 36 4
ids ui jk uj yh 34 56 42 45 15
ids ui jk uj yh 34 56 42 12
ids ui jk uj yh 34 56 43 13
ids ui jk uj yh 34 56 44 14
Как корректно сгруппировать с выборкой строки по максимальному значению io приведя к следующему виду:
io yh qw er yu io
87 89 12 23 4
uj yh 34 56 45 15
Или "схлопнуть" основную таблицу, т.е. сгруппировать по столбцу df и также вывести строки с максимальным io:
df po oh io yh qw er ty yu io
id 09 09 87 89 12 23 36 4
ids ui jk uj yh 34 56 42 45 15
Один способов, которые встретил, это idxmax. На сколько корректно, в данном случае, при помощи его?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Вот рабочий пример:
In [61]: df
Out[61]:
df po oh io1 yh qw er ty yu io2
0 id 09 09 87 89 12 23 34 45.0 1
1 id 09 09 87 89 12 23 34 NaN 2
2 id 09 09 87 89 12 23 35 NaN 3
3 id 09 09 87 89 12 23 36 NaN 4
4 ids ui jk uj yh 34 56 42 45.0 15
5 ids ui jk uj yh 34 56 42 NaN 12
6 ids ui jk uj yh 34 56 43 NaN 13
7 ids ui jk uj yh 34 56 44 NaN 14
In [62]: res = (df
.groupby("df", as_index=False, group_keys=False)
.apply(lambda x: x.nlargest(1, "io2")))
In [63]: res
Out[63]:
df po oh io1 yh qw er ty yu io2
3 id 09 09 87 89 12 23 36 NaN 4
4 ids ui jk uj yh 34 56 42 45.0 15