Вы можете использовать следующий синтаксис для отображения 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: как рассчитать корреляцию по группе