Как найти строку с максимальным значением pandas

Use the pandas idxmax function. It’s straightforward:

>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
          A         B         C
0  1.232853 -1.979459 -0.573626
1  0.140767  0.394940  1.068890
2  0.742023  1.343977 -0.579745
3  2.125299 -0.649328 -0.211692
4 -0.187253  1.908618 -1.862934
>>> df['A'].idxmax()
3
>>> df['B'].idxmax()
4
>>> df['C'].idxmax()
1
  • Alternatively you could also use numpy.argmax, such as numpy.argmax(df['A']) — it provides the same thing, and appears at least as fast as idxmax in cursory observations.

  • idxmax() returns indices labels, not integers.

  • Example’: if you have string values as your index labels, like rows ‘a’ through ‘e’, you might want to know that the max occurs in row 4 (not row ‘d’).

  • if you want the integer position of that label within the Index you have to get it manually (which can be tricky now that duplicate row labels are allowed).


HISTORICAL NOTES:

  • idxmax() used to be called argmax() prior to 0.11
  • argmax was deprecated prior to 1.0.0 and removed entirely in 1.0.0
  • back as of Pandas 0.16, argmax used to exist and perform the same function (though appeared to run more slowly than idxmax).
  • argmax function returned the integer position within the index of the row location of the maximum element.
  • pandas moved to using row labels instead of integer indices. Positional integer indices used to be very common, more common than labels, especially in applications where duplicate row labels are common.

For example, consider this toy DataFrame with a duplicate row label:

In [19]: dfrm
Out[19]: 
          A         B         C
a  0.143693  0.653810  0.586007
b  0.623582  0.312903  0.919076
c  0.165438  0.889809  0.000967
d  0.308245  0.787776  0.571195
e  0.870068  0.935626  0.606911
f  0.037602  0.855193  0.728495
g  0.605366  0.338105  0.696460
h  0.000000  0.090814  0.963927
i  0.688343  0.188468  0.352213
i  0.879000  0.105039  0.900260

In [20]: dfrm['A'].idxmax()
Out[20]: 'i'

In [21]: dfrm.iloc[dfrm['A'].idxmax()]  # .ix instead of .iloc in older versions of pandas
Out[21]: 
          A         B         C
i  0.688343  0.188468  0.352213
i  0.879000  0.105039  0.900260

So here a naive use of idxmax is not sufficient, whereas the old form of argmax would correctly provide the positional location of the max row (in this case, position 9).

This is exactly one of those nasty kinds of bug-prone behaviors in dynamically typed languages that makes this sort of thing so unfortunate, and worth beating a dead horse over. If you are writing systems code and your system suddenly gets used on some data sets that are not cleaned properly before being joined, it’s very easy to end up with duplicate row labels, especially string labels like a CUSIP or SEDOL identifier for financial assets. You can’t easily use the type system to help you out, and you may not be able to enforce uniqueness on the index without running into unexpectedly missing data.

So you’re left with hoping that your unit tests covered everything (they didn’t, or more likely no one wrote any tests) — otherwise (most likely) you’re just left waiting to see if you happen to smack into this error at runtime, in which case you probably have to go drop many hours worth of work from the database you were outputting results to, bang your head against the wall in IPython trying to manually reproduce the problem, finally figuring out that it’s because idxmax can only report the label of the max row, and then being disappointed that no standard function automatically gets the positions of the max row for you, writing a buggy implementation yourself, editing the code, and praying you don’t run into the problem again.

  • Редакция Кодкампа

17 авг. 2022 г.
читать 1 мин


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

Метод 1: вернуть строку с максимальным значением

df[df['my_column'] == df['my_column']. max ()]

Метод 2: вернуть индекс строки с максимальным значением

df['my_column']. idxmax ()

В следующих примерах показано, как использовать каждый метод на практике со следующими пандами DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
 'points': [18, 22, 19, 14, 14, 11, 28, 20],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
#view DataFrame
print(df)

 team points assists rebounds
0 A 18 5 11
1 B 22 7 8
2 C 19 7 10
3 D 14 9 6
4 E 14 12 6
5 F 11 9 5
6 G 28 9 9
7 H 20 4 12

Пример 1: возвращаемая строка с максимальным значением

В следующем коде показано, как вернуть строку в DataFrame с максимальным значением в столбце точек :

#return row with max value in points column
df[df['points'] == df['points']. max ()]

 team points assists rebounds
6 G 28 9 9

Максимальное значение в столбце точек равно 28 , поэтому была возвращена строка, содержащая это значение.

Пример 2: возвращаемый индекс строки с максимальным значением

В следующем коде показано, как вернуть только индекс строки с максимальным значением в столбце точек :

#return row that contains max value in points column
df['points']. idxmax ()

6

Строка в позиции индекса 6 содержала максимальное значение в столбце точек , поэтому было возвращено значение 6 .

Связанный: Как использовать функцию idxmax() в Pandas (с примерами)

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Как найти максимальное значение по группе в Pandas
Как найти максимальное значение столбцов в Pandas

У меня есть фрейм данных по фильмам: название, актёрский состав, жанры, бюджет и т.д. Нужно найти фильм с максимальным бюджетом. Я нашел максимальный бюджет.

Но как мне сопоставить с его с названием фильма?

Текущий код:

data = pd.read_csv('movie_bd_v5.csv')
top_budget = data['budget'].max()

0xdb's user avatar

0xdb

51.4k194 золотых знака56 серебряных знаков232 бронзовых знака

задан 10 фев 2021 в 11:09

yegor's user avatar

1

Воспользуйтесь методом DataFrame.nlargest():

top_budget_movie = data.nlargest(1, columns=["budget"])["name"]

UPD:
можно сделать менее эффективно (в два шага) — сначала находим максимум и после этого выбираем строки в которых бюджет максимальный:

max_budget = data['budget'].max()
res = df.query("budget == @max_budget")["name"]

PS в этом случае если существует более одного фильма с максимальным (одинаковым) бюджетом, то вам придется самому позаботиться о дубликатах…

ответ дан 10 фев 2021 в 11:22

MaxU - stand with Ukraine's user avatar

2

DataFrame – это структура данных, представляющая особый вид двумерного массива, построенного поверх нескольких объектов Series. Это центральные структуры данных Pandas – чрезвычайно популярной и мощной платформы анализа данных для Python.

DataFram’ы имеют возможность присваивать имена строкам и/или столбцам и в некотором смысле представляют собой таблицы.

Давайте импортируем Pandas и создадим DataFrame из словаря:

import pandas as pd

df_data = {
    "column1": [24, 9, 20, 24],
    "column2": [17, 16, 201, 16]
}

df = pd.DataFrame(df_data) 
print(df)

У Pandas отличная интеграция с Python, и мы можем легко создавать DataFrame из словарей. df, который мы создали, теперь содержит столбцы и их соответствующие значения:

column1  column2
0       24       17
1        9       16
2       20      201
3       24       16

В каждом столбце есть список элементов, и мы можем искать максимальный элемент каждого столбца, каждой строки или всего DataFrame.

Находим максимальный элемент в столбце DataFrame

Чтобы найти максимальный элемент каждого столбца, мы вызываем метод max() класса DataFrame, который возвращает Series имен столбцов и их наибольшие значения:

max_elements = df.max()
print(max_elements)

Это даст нам максимальное значение для каждого столбца нашего df, как и ожидалось:

column1     24
column2    201
dtype: int64

Однако, чтобы найти элемент max() одного столбца, вы сначала изолируете его и вызываете метод max() для этого конкретного Series:

max_element = df['column1'].max()
print(max_element)
24

Находим максимальный элемент в строке DataFrame

Поиск максимального элемента каждой строки DataFrame также зависит от метода max(), но мы устанавливаем аргумент axis равным 1.

Значение по умолчанию для аргумента axis равно 0. Если axis равно 0, метод max() найдет максимальный элемент каждого столбца. С другой стороны, если axis равно 1, функция max() найдет максимальный элемент каждой строки.

max_elements = df.max(axis=1)
print(max_elements)

Это даст нам максимальное значение для каждой строки нашего df:

0     24
1     16
2    201
3     24
dtype: int64

Если вы хотите выполнить поиск по определенной строке, вы можете получить к ней доступ через iloc[]:

print(df)

for row in df.index:
    print(f'Max element of row {row} is:', max(df.iloc[row]))

Мы напечатали df для справки, чтобы упростить проверку результатов, и получили элемент max() каждой строки, полученный с помощью iloc[]:

column1  column2
0       24       17
1        9       16
2       20      201
3       24       16

Max element of row 0 is: 24
Max element of row 1 is: 16
Max element of row 2 is: 201
Max element of row 3 is: 24

Находим максимальный элемент во всем DataFrame

Наконец, узнаем, как найти максимальный элемент в DataFrame.

Основываясь на предыдущем опыте, это также должно быть просто. Мы просто используем встроенный метод max() и передадим ему один из двух ранее созданных списков элементов max: либо для всех строк, либо для всех столбцов. Это два аспекта одних и тех же данных, поэтому результат будет один и тот же.

Этот код должен дать нам единственное наивысшее значение во всем df:

max_by_columns = df.max()
max_by_rows = df.max(axis=1)

df_max = max(max_by_columns)
print("Max element based on the list of columns: ", df_max)

df_max2 = max(max_by_rows)
print("Max element based on the list of rows: ", df_max2)

Получим это:

Max element based on the list of columns:  201
Max element based on the list of rows:  201

Всё верно! Максимальный элемент списка максимальных элементов каждой строки должен совпадать с максимальным элементом списка максимальных элементов каждого столбца, и оба они должны совпадать с максимальным элементом всего DataFrame.

Заключение

В этом кратком руководстве мы рассмотрели, как найти максимальный элемент Pandas DataFrame для столбцов, строк и всего экземпляра DataFrame.

Просмотры: 3 882

Как найти минимальное и максимальное значение в Pandas

Нахождение максимального и минимального значения в Pandas — зачастую, необходимая операция для анализа данных. Поэтому предлагаю попрактиковаться на примере тренировочного датасета: отыскать предельные значения и вывести строки с этими значениями на экран.

Действовать будем по плану:

Сначала поработаем с максимальными значениями:
  1. Найдем максимальное значение:
    • для каждого столбца таблицы;
    • в определенном столбце таблицы
  2. Выведем на экран строки с максимальными значениями
Затем поработаем с минимальными значениями:
  1. Найдем минимальное значение:
    • для каждого столбца таблицы;
    • в определенном столбце таблицы
  2. Выведем на экран строки с минимальными значениями

Загрузка датасета

Для наглядности будем использовать тренировочный датасет с пропорциями некоторых продуктов для приготовления кондитерских изделий. Скачать датасет можно по ссылке: products.csv. Итак, загрузим файл с данными:

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

Выведем таблицу на экран:

Названия десертов и наименования продуктов представлены в качестве индексов таблицы. Числовое значение в каждой ячейке, расположенной на пересечении строки с десертом и колонки с наименованием продукта — это количество продукта в граммах, необходимое для приготовления 1 кг. изделия.

После загрузки датасета можно переходить к реализации нашего плана и отыскать предельные значения!

Работаем с максимальными значениями

1. Ищем максимальное значение:

# для каждого столбца таблицы:

Получим максимальный вес каждого продукта. Для этого найдем максимальные значения в каждом столбце таблицы с помощью функции max() и выведем их на экран. Применим функцию max() ко всей таблице data:

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

#Получим максимальные значения в каждом столбце
maximums = data.max()

# выведем результат на экран
print(maximums)

Полученный результат — максимальные значения в каждом столбце

 egg       200
 sugar     282
 flour     900
 butter    235
 dtype: int64 

# в определенном столбце таблицы:

Узнаем, сколько потребуется сахара для приготовления 1 кг. самого сладкого блюда из представленных в таблице. Для этого получим максимальное значение в столбце «sugar» с помощью функции max(). На этот раз применим функцию max() к столбцу «sugar»:

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

#Получим максимальное значение в столбце "sugar"
max_sugar = data['sugar'].max()

# выведем результат на экран
print(max_sugar)

Полученный результат — максимальное значение в столбце «sugar»

282 

Теперь мы знаем, что в 1 кг. самого сладкого блюда из таблицы data содержится 282 грамм сахара. Однако, хотелось бы узнать название этого блюда, а еще лучше — вывести всю строку с информацией о нем:

2. Выводим на экран строку с максимальным значением

Для этого используем полученное значение с максимальным количеством сахара (data[‘sugar’].max()) и выведем строку, для которой выполняется условие data[‘sugar’]==data[‘sugar’].max():

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

# Найдем строку с максимальным значением
str = data[data['sugar']==data['sugar'].max()]
# Выведем строку на экран
print(str)

Полученный результат — строка таблицы data с максимальным значением

В соответствии с полученным результатом, самым сладким блюдом из представленных в таблице data являются печенья!

Работаем с минимальными значениями

Главным козырем при нахождении минимальных значений в данных является функция min(). Рассмотрим варианты ее применения для получения желаемого результата:

1. Ищем минимальное значение:

# для каждого столбца таблицы

Выведем на экран минимальные значения в каждом столбце таблицы с помощью функции min(). Для этого применим функцию min() ко всей таблице data:

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

# Найдем минимальные значения в каждом столбце таблицы
minimums = data.min()

# Выведем результат на экран
print(minimums)

Полученный результат — минимальные значения в каждом столбце

  egg       50
 sugar      0
 flour     50
 butter     0
 dtype: int64 

# в определенном столбце таблицы:

Найдем минимальное значение в столбце «sugar» с помощью функции min():

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

# Найдем минимальное значение в столбце «sugar» 
min_sugar = data['sugar'].min()

# Выведем найденное значение на экран
print(min_sugar)

Результат на экране — минимальное значение в столбце «sugar»:

0 

Выходит, что среди размещенных в таблице блюд присутствуют несладкие изделия. Давайте узнаем, какой представитель выпечки самый несладкий: выведем на экран строку с его именем!

2. Выводим на экран строку с минимальным значением

Для этого найдем строку, для которой значение в столбце ‘sugar’ совпадает с найденным ранее минимальным количеством сахара: data[‘sugar’]==data[‘sugar’].min():

import pandas as pd
data = pd.read_csv('products.csv', sep=';', index_col='dish')
data.head(11)

# Найдем строку с минимальным значением
str = data[data['sugar']==data['sugar'].min()]
# выведем строку на экран
print(str)

Результат — строка с минимальным значением в столбце «sugar»:

Таким образом, нам удалось выяснить, что в пасте (в соответствии с таблицей data) не содержится сахара. Ах, вот почему она не сладкая! 😉

Теперь, когда все технологические секреты раскрыты, а предельные значения найдены, подведем итоги:

У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: «Кодим на Python! Вместе «питонить» веселее! 😉

Коротко о поиске максимальных и минимальных значений в pandas:

Дано: датасет data c числовыми значениями в столбцах: «egg», «sugar», «flour», «butter».

1. Получим максимальные / минимальные значения для каждого столбца:

# Максимальные значения - maximums
maximums = data.max()

# Минимальные значения - minimums
minimums = data.min() 

2. Получим максимальное / минимальное значение для столбца «sugar»:

# Максимальное значение в столбце "sugar"
max_sugar = data['sugar'].max()

# Минимальное значение в столбце "sugar"
min_sugar = data['sugar'].min()

3. Выведем на экран строку с максимальным / минимальным значением в столбце «sugar»:

# Найдем строку с максимальным значением
str = data[data['sugar']==data['sugar'].max()]
# выведем строку на экран
print(str)

# Найдем строку с минимальным значением
str = data[data['sugar']==data['sugar'].min()]
# выведем строку на экран
print(str)

Понравилась статья? Поделить с друзьями:
  • Консультант плюс график отпусков как составить
  • Как найти свой жизненный путь произведения
  • Как составить график дежурств на месяц на 4 человека день ночь
  • Как составить маршрут по риму
  • Как найти кота котенка