Как выбрать строку pandas с максимальным значением в одном столбце из группы строк, которые имеют два общих столбца?

#python #pandas #dataframe #indexing

#python #pandas #фрейм данных #индексирование

Вопрос:

Следующий фрейм данных Pandas df содержит 5 цветных столбцов, а номера индексов в самом левом углу выделены черным цветом.

введите описание изображения здесь

Обратите внимание, что последние два столбца (назовем их col4 и col5 ) имеют статические номера, обозначающие сегмент, группу или фрагмент данных. Другие группы (которые меняют свои статические номера в этих двух столбцах) были скрыты со скриншота.

Как выделить строку или индекс строки, которая имеет наибольшее значение в третьем столбце (вызывается col3 ), обведенный черным: 1.90977 , при условии, что последние 2 строки являются статическими? Другими словами, выделите лучший ряд в группе

ищете что-то подобное, что не работает:

 df.loc[(df['col3'] == 0.999141) amp; (df['col4'] == 0.000861559)]
 

Ответ №1:

Если не последние 2 столбца имеют одинаковые значения, используйте numpy.isclose для выбора столбцов с некоторой точностью, также для повышения производительности лучше выбирать DataFrame.loc по маске и имени столбца:

 df.loc[np.isclose(df['col4'], 0.999141) amp; np.isclose(df['col5'], 0.000861559), 'col3'].max()
 

Для индекса максимального значения используйте Series.idxmax :

 df.loc[np.isclose(df['col4'], 0.999141) amp; np.isclose(df['col5'], 0.000861559), 'col3'].idxmax()
 

Для выбора по максимальному col4 и минимальному col5 использованию:

 df.loc[df['col4'].eq(df['col4'].max()) amp; df['col5'].eq(df['col5'].min()), 'col3'].max()

df.loc[df['col4'].eq(df['col4'].max()) amp; df['col5'].eq(df['col5'].min()), 'col3'].idxmax()
 

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

1. первое решение, как и моя попытка, не распознает ничего, что установлено на == 0.999141 или другое, несмотря на то, что число четко видно, чего я не понимаю

2. почему вы постоянно цитируете col2 , когда речь идет только о столбцах 3,4 и 5?

3. @develarist — значит, последние 2 есть col3 , col4 а предыдущие нет col2 ? К сожалению, в образце данных не видны имена столбцов, поэтому угадайте

4. Последние 2 — это col4 и col5 . «Как выделить строку или индекс строки, которая имеет наибольшее значение в третьем столбце (вызывается col3 ), обведенный черным: 1.90977 »

5. @develarist — ой, извините, ответ был отредактирован.