Метод idxmin
Метод idxmin применяется к объекту GroupBy
и возвращает индекс строки, содержащей минимальное значение
в каждой группе для указанного столбца. Если минимальных значений
несколько, возвращается индекс первого из них.
Синтаксис
groupby_obj.idxmin([axis, skipna])
Параметры метода idxmin:
-
axis(по умолчанию0) - ось, по которой ищем минимум.0- по строкам,1- по столбцам -
skipna(по умолчаниюTrue) - пропускать ли пропущенные значения
Пример
Давайте создадим таблицу с данными и сгруппируем её по столбцу 'a':
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, 5, 20, 15, 30, 25],
'c': [100, 200, 300, 150, 400, 350]
})
print(df)
Результат выполнения кода:
a b c
0 1 10 100
1 1 5 200
2 2 20 300
3 2 15 150
4 3 30 400
5 3 25 350
Теперь применим метод idxmin к группированному объекту:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, 5, 20, 15, 30, 25],
'c': [100, 200, 300, 150, 400, 350]
})
grouped = df.groupby('a')
res = grouped.idxmin()
print(res)
Результат выполнения кода:
b c
a
1 1 0
2 3 3
3 5 5
Как видно из результата, для каждой группы (значения 'a') возвращается индекс строки с минимальным значением в столбцах 'b' и 'c':
-
Для группы
1минимальное значение в столбце 'b' равно5(индекс1), а в столбце 'c' -100(индекс0) -
Для группы
2минимальное значение в столбце 'b' равно15(индекс3), а в столбце 'c' -150(индекс3) -
Для группы
3минимальное значение в столбце 'b' равно25(индекс5), а в столбце 'c' -350(индекс5)
Пример
Давайте получим индекс минимального значения только для одного столбца:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, 5, 20, 15, 30, 25],
'c': [100, 200, 300, 150, 400, 350]
})
grouped = df.groupby('a')
res = grouped['b'].idxmin()
print(res)
Результат выполнения кода:
a
1 1
2 3
3 5
dtype: int64
В результате мы получили для каждой группы индекс строки, где значение столбца 'b' минимально.
Пример
Рассмотрим работу метода с пропущенными значениями:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, np.nan, 20, 15, 30, 25],
'c': [100, 200, 300, np.nan, 400, 350]
})
grouped = df.groupby('a')
res = grouped.idxmin(skipna=True)
print(res)
Результат выполнения кода:
b c
a
1 0 0
2 3 2
3 5 5
Если же установить параметр skipna в False,
то пропущенные значения будут учитываться при поиске минимума:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, np.nan, 20, 15, 30, 25],
'c': [100, 200, 300, np.nan, 400, 350]
})
grouped = df.groupby('a')
res = grouped.idxmin(skipna=False)
print(res)
Результат выполнения кода:
b c
a
1 1 0
2 3 3
3 5 5
Пример
Используем метод idxmin для получения строки с минимальным значением в каждой группе:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, 5, 20, 15, 30, 25],
'c': [100, 200, 300, 150, 400, 350]
})
grouped = df.groupby('a')
min_indices = grouped['b'].idxmin()
res = df.loc[min_indices]
print(res)
Результат выполнения кода:
a b c
1 1 5 200
3 2 15 150
5 3 25 350
Таким образом, мы получили строки с минимальным значением столбца 'b' в каждой группе.