Pandas: как использовать GroupBy с nlargest()


Вы можете использовать следующий синтаксис для отображения n самых больших значений по группам в кадре данных pandas:

#display two largest values by group
df.groupby('group_var')['values_var']. nlargest ( 2 )

И вы можете использовать следующий синтаксис для выполнения некоторой операции (например, суммирования) над n наибольшими значениями по группе в кадре данных pandas:

#find sum of two largest values by group
df.groupby('group_var')['values_var'].apply ( lambda grp: grp. nlargest ( 2 ). sum ())

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

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
 'points': [12, 29, 34, 14, 10, 11, 7, 36, 34, 22]})

#view DataFrame
print(df)

 team points
0 A 12
1 A 29
2 A 34
3 A 14
4 A 10
5 B 11
6 B 7
7 B 36
8 B 34
9 B 22

Пример 1. Отображение N наибольших значений по группам

Мы можем использовать следующий синтаксис для отображения двух самых больших значений очков , сгруппированных по командам :

#display two largest points values grouped by team
df.groupby('team')['points']. nlargest ( 2 )

team 
A 2 34
 1 29
B 7 36
 8 34
Name: points, dtype: int64

В выходных данных показаны два самых больших значения баллов для каждой команды вместе с их позициями в индексе в исходном фрейме данных.

Пример 2. Выполнение операции над N наибольшими значениями по группам

Мы можем использовать следующий синтаксис для вычисления суммы двух самых больших значений очков , сгруппированных по командам :

#calculate sum of two largest points values for each team
df.groupby('team')['points'].apply ( lambda grp: grp. nlargest ( 2 ). sum ())

team
A 63
B 70
Name: points, dtype: int64

Вот как интерпретировать вывод:

  • Сумма двух наибольших очков команды А равна 63 .
  • Сумма двух самых больших значений очков для команды B равна 70 .

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

#calculate mean of two largest points values for each team
df.groupby('team')['points'].apply ( lambda grp: grp. nlargest ( 2 ).mean())

team
A 31.5
B 35.0
Name: points, dtype: float64

Вот как интерпретировать вывод:

  • Среднее значение двух наибольших значений очков для команды А равно 31,5 .
  • Среднее значение двух наибольших значений очков для команды B равно 35,0 .

Примечание.Полную документацию по функции GroupBy можно найти здесь .

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

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

Pandas: как рассчитать совокупную сумму по группе
Pandas: как подсчитать уникальные значения по группам
Pandas: как рассчитать режим по группе
Pandas: как рассчитать корреляцию по группе

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.