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


Часто вам может потребоваться сгруппировать и агрегировать несколько столбцов DataFrame pandas.

К счастью, это легко сделать с помощью функций pandas .groupby() и .agg() .

В этом руководстве объясняется несколько примеров практического использования этих функций.

Пример 1. Сгруппируйте по двум столбцам и найдите среднее значение.

Предположим, у нас есть следующий DataFrame pandas:

 import pandas as pd

#createDataFrame
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 AG 5 11
1 BG 7 8
2 BF 7 10
3 BG 8 6
4 BF 5 6
5 MF 7 9
6 MC 6 6
7 MC 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
4M 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
4M F 7.0

Пример 2. Группировка по двум столбцам и поиск нескольких статистических данных.

Предположим, мы используем тот же DataFrame pandas, что и в предыдущем примере:

 import pandas as pd

#createDataFrame
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 команды А — 11 .
  • Среднее количество подборов игроков на позиции F команды B составляет 8 .
  • Максимальное количество подборов для игроков на позиции F команды B составляет 10 .

И так далее.

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

Как фильтровать DataFrame Pandas по нескольким условиям
Как подсчитать пропущенные значения в DataFrame Pandas
Как объединить несколько кадров данных Pandas

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

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