Что будет, если вызвать max вместо idxmax для поиска максимального значения?
Что проверяют
Точно ли вы понимаете, что возвращает метод, а не помните название на слух. Путаница между значением и меткой строки это типичная тихая ошибка, которая не роняет пайплайн, а портит данные дальше по цепочке.
Как отвечать
max() возвращает само максимальное значение, idxmax() возвращает метку индекса первого максимума. Ошибки не будет, код молча пойдёт дальше с числом вместо ключа строки, и заметите вы это, только когда подставите результат в loc.
s = pd.Series([1, 3, 5, 4], index=["a", "b", "c", "d"])
s.max() # 5
s.idxmax() # 'c'
df.loc[df["score"].idxmax()] # строка целикомДальше проговорите тонкости, ради которых вопрос и задан:
idxmaxвозвращает метку, а не позицию. Позиция этоargmax. Пока индекс идёт подряд от нуля, они совпадают, и ошибка вылезет только после фильтрации илиset_index;- на датафрейме
max()даёт максимумы по столбцам,idxmax()метки строк, где они достигнуты, аaxis=1переключает результат на имена столбцов; - обе функции пропускают пропуски, но на пустой серии или на серии из одних пропусков
idxmaxбросает исключение, тогда какmaxспокойно вернёт пропуск; - при нескольких одинаковых максимумах возвращается только первый, остальные строки теряются молча.
Где спотыкаются
Ищут строку сравнением на равенство с максимумом. Для чисел с плавающей точкой это ненадёжно, а при повторяющемся максимуме вернётся несколько строк там, где код ждёт одну, и следующий шаг упадёт уже в другом месте.
Второе: подставляют результат max() в loc. При строковом индексе это ошибка ключа, при числовом индексе значение случайно совпадёт с меткой, и вы получите не ту строку вообще без предупреждения.
Третье: считают метку позицией и передают её в iloc. На переставленном или отфильтрованном индексе это опять другая строка, и опять без единого сообщения об ошибке.