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