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


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

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

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

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

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

 import pandas as pd

#createDataFrame
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 to 12
1 to 29
2 to 34
3 to 14
4 to 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   
At 2 34
      1 29
B 7 36
      8 34
Name: points, dtype: int64

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

Пример 2: выполнить операцию над N наибольшими значениями на группу

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

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

team
At 63
B70
Name: points, dtype: int64

Вот как интерпретировать результат:

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

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

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

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

Вот как интерпретировать результат:

  • Среднее значение двух высших баллов для Команды А составляет 31,5 .
  • Среднее значение двух высших баллов для Команды Б составляет 35,0 .

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *