Часто вам может понадобиться группировать и агрегировать по нескольким столбцам кадра данных pandas.
К счастью, это легко сделать с помощью функций pandas .groupby() и .agg() .
В этом руководстве объясняется несколько примеров использования этих функций на практике.
Пример 1: группировка по двум столбцам и поиск среднего
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
'assists': [5, 7, 7, 8, 5, 7, 6, 9],
'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})
#view DataFrame
print(df)
team position assists rebounds
0 A G 5 11
1 B G 7 8
2 B F 7 10
3 B G 8 6
4 B F 5 6
5 M F 7 9
6 M C 6 6
7 M C 9 10
Следующий код показывает, как сгруппировать по столбцам «команда» и «позиция» и найти средние передачи:
df.groupby(['team', 'position']).agg({'assists': ['mean']}). reset_index()
team position assists
mean
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4 M F 7.0
Вывод говорит нам:
- Среднее количество передач для игроков на позиции G в команде А равно 5,0 .
- Среднее количество передач для игроков на позиции F в команде B равно 6,0 .
- Среднее количество передач для игроков на позиции G в команде B равно 7,5 .
И так далее.
Мы также можем использовать следующий код для переименования столбцов в результирующем DataFrame:
#group by team and position and find mean assists
new = df.groupby(['team', 'position']).agg({'assists': ['mean']}). reset_index()
#rename columns
new.columns = ['team', 'pos', 'mean_assists']
#view DataFrame
print(new)
team pos mean_assists
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4 M F 7.0
Пример 2: группировка по двум столбцам и поиск нескольких статистических данных
Предположим, мы используем тот же DataFrame pandas, что и в предыдущем примере:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
'assists': [5, 7, 7, 8, 5, 7, 6, 9],
'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})
Следующий код показывает, как найти медиану и максимальное количество подборов, сгруппированных по столбцам «команда» и «позиция»:
df.groupby(['team', 'position']).agg({'rebounds': ['median', 'max']}). reset_index()
team position rebounds
median max
0 A G 11 11
1 B F 8 10
2 B G 7 8
3 M C 8 10
4 M F 9 9
Вывод говорит нам:
- Среднее количество передач по подборам для игроков на позиции G в команде А равно 11 .
- Максимальное количество подборов для игроков на позиции G в команде A равно 11 .
- Среднее количество подборов для игроков на позиции F в команде B равно 8 .
- Максимальное количество подборов для игроков на позиции F в команде B равно 10 .
И так далее.
Дополнительные ресурсы
Как фильтровать кадр данных Pandas по нескольким условиям
Как подсчитать пропущенные значения в Pandas DataFrame
Как сложить несколько фреймов данных Pandas