Pandas: как использовать GroupBy с подсчетом бинов


Вы можете использовать следующий синтаксис для вычисления количества ячеек одной переменной, сгруппированной по другой переменной в pandas:

#define bins
groups = df.groupby(['group_var', pd.cut (df.value_var , bins)])

#display bin count by group variable
groups. size().unstack ()

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: используйте GroupBy с количеством бинов в Pandas

Предположим, у нас есть следующий кадр данных pandas, который показывает очки, набранные баскетболистами в разных командах:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
 'points': [4, 7, 7, 11, 12, 15, 19, 19,
 5, 5, 11, 12, 14, 14, 15, 15]})

#view DataFrame
print(df)

 team points
0 A 4
1 A 7
2 A 7
3 A 11
4 A 12
5 A 15
6 A 19
7 A 19
8 B 5
9 B 5
10 B 11
11 B 12
12 B 14
13 B 14
14 B 15
15 B 15

Мы можем использовать следующий синтаксис, чтобы вычислить частоту очков для каждой команды, сгруппированной в определенные ячейки:

#define groups
groups = df.groupby(['team', pd.cut (df.points , [0, 10, 15, 20])])

#display bin count grouped by team
groups. size().unstack ()

points (0, 10] (10, 15] (15, 20]
 team 
 A 3 3 2
 B 2 6 0

Вот как интерпретировать вывод:

  • Всего 3 игрока команды А набрали от 0 до 10 очков.
  • В общей сложности 3 игрока команды А набрали от 10 до 15 очков.
  • В общей сложности 2 игрока команды А набрали от 15 до 20 очков.

И так далее.

Обратите внимание, что мы можем указать любые бины, которые нам нужны, в функции pd.cut() .

Например, мы могли бы определить всего два бина:

#define groups
groups = df.groupby(['team', pd.cut (df.points , [0, 10, 20])])

#display bin count grouped by team
groups. size().unstack ()

points (0, 10] (10, 20]
 team 
 A 3 5
 B 2 6

Вот как интерпретировать вывод:

  • Всего 3 игрока команды А набрали от 0 до 10 очков.
  • В общей сложности 5 игроков команды А набрали от 10 до 20 очков.
  • В общей сложности 2 игрока команды B набрали от 0 до 10 очков.
  • В общей сложности 6 игроков команды B набрали от 10 до 20 очков.

Примечание 1. Полную документацию по функции GroupBy можно найти здесь .

Примечание 2 : Вы можете найти полную документацию по функции cut здесь .

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

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Pandas: как рассчитать совокупную сумму по группе
Pandas: как подсчитать уникальные значения по группам
Pandas: как рассчитать режим по группе
Pandas: как рассчитать корреляцию по группе