Метод idxmax
Метод idxmax применяется к объекту GroupBy
и возвращает индекс строки с максимальным значением
для каждой группы. Метод полезен, когда нужно найти
не само максимальное значение, а позицию, в которой
оно находится. По умолчанию метод работает с числовыми
столбцами, но может быть применён и к другим типам
данных, если это имеет смысл.
Синтаксис
groupby_object.idxmax([axis, skipna, numeric_only])
Пример
Давайте создадим таблицу с данными о продажах по городам и найдём индекс строки с максимальной продажей в каждом городе:
import pandas as pd
df = pd.DataFrame({
'city': ['a', 'a', 'b', 'b', 'c', 'c'],
'sales': [100, 200, 150, 300, 250, 180]
})
grouped = df.groupby('city')
res = grouped['sales'].idxmax()
print(res)
Результат выполнения кода:
city
a 1
b 3
c 4
dtype: int64
Пример
Давайте посмотрим, как метод работает с несколькими столбцами одновременно:
import pandas as pd
df = pd.DataFrame({
'group': ['a', 'a', 'b', 'b', 'c', 'c'],
'x': [10, 20, 30, 40, 50, 60],
'y': [5, 15, 25, 35, 45, 55]
})
grouped = df.groupby('group')
res = grouped.idxmax()
print(res)
Результат выполнения кода:
x y
group
a 1 1
b 3 3
c 5 5
Пример
Рассмотрим работу с пропущенными значениями и параметром skipna:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'group': ['a', 'a', 'b', 'b', 'c', 'c'],
'value': [10, np.nan, 30, 40, np.nan, 60]
})
grouped = df.groupby('group')
res = grouped['value'].idxmax(skipna=True)
print(res)
Результат выполнения кода:
group
a 0
b 3
c 5
dtype: int64
Пример
Метод idxmax также можно использовать для поиска индекса максимального значения после применения агрегирующих функций:
import pandas as pd
df = pd.DataFrame({
'category': ['a', 'a', 'b', 'b', 'c', 'c'],
'value1': [1, 2, 3, 4, 5, 6],
'value2': [10, 20, 30, 40, 50, 60]
})
grouped = df.groupby('category').sum()
res = grouped.idxmax()
print(res)
Результат выполнения кода:
value1 c
value2 c
dtype: object