Pandas

Pandas: как группировать и агрегировать по нескольким столбцам

В: Pandas

Часто вам может понадобиться группировать и агрегировать по нескольким столбцам кадра данных 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

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