#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 — ой, извините, ответ был отредактирован.