Pandas: как сгруппировать два столбца и агрегировать
Вы можете использовать следующий базовый синтаксис с функцией groupby() в pandas для группировки по двум столбцам и объединения еще одного столбца:
df. groupby ([' var1 ',' var2 '])[' var3 ']. mean ()
В этом конкретном примере DataFrame группируется по столбцам var1 и var2 , а затем вычисляется среднее значение столбца var3 .
В следующих примерах показано, как группировать два столбца и агрегировать их с помощью следующего DataFrame pandas:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], ' position ': ['G', 'G', 'F', 'F', 'F', 'G', 'G', 'G', 'G', 'F'], ' points ': [15, 22, 24, 25, 20, 35, 34, 19, 14, 12]}) #view DataFrame print (df) team position points 0 AG 15 1 AG 22 2 AF 24 3 AF 25 4 AF 20 5 BG 35 6 BG 34 7 BG 19 8 BG 14 9 BF 12
Пример 1. Сгруппируйте два столбца и вычислите среднее значение другого столбца.
Мы можем использовать следующий синтаксис для расчета среднего значения столбца очков , сгруппированного по столбцам команды и позиции :
#calculate mean of points grouped by team and position columns
df. groupby ([' team ', ' position '])[' points ']. mean ()
team position
AF23.0
G 18.5
BF 12.0
G 25.5
Name: points, dtype: float64
По результату мы видим:
- Среднее количество очков игроков команды А на позиции F составляет 23 .
- Среднее количество очков игроков команды А на позиции G составляет 18,5 .
И так далее.
Пример 2. Сгруппируйте два столбца и вычислите максимум другого столбца.
Мы можем использовать следующий синтаксис для расчета максимального значения столбца очков , сгруппированного по столбцам команды и позиции :
#calculate max of points grouped by team and position columns
df. groupby ([' team ', ' position '])[' points ']. max ()
team position
AF25
G22
BF 12
G 35
Name: points, dtype: int64
По результату мы видим:
- Максимальное количество очков для игроков команды А на позиции F составляет 25 .
- Максимальное количество очков для игроков команды А на позиции G составляет 22 .
И так далее.
Пример 3. Группировка по двум столбцам и подсчет вхождений.
Мы можем использовать следующий синтаксис для подсчета вхождений каждой комбинации столбцов команды и позиции :
#count occurrences of each combination of team and position columns
df. groupby ([' team ', ' position ']). size ()
team position
AF3
G2
BF 1
G4
dtype: int64
По результату мы видим:
- В команде А на позиции F находятся 3 игрока.
- В команде А на позиции G находятся 2 игрока.
И так далее.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:
Как посчитать уникальные значения с помощью Pandas GroupBy
Как применить функцию к Pandas Groupby
Как создать гистограмму из Pandas GroupBy