Как подсчитать уникальные значения с помощью Pandas GroupBy


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

df.groupby('group_column')['count_column']. nunique ()

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

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
 'position': ['G', 'G', 'G', 'F', 'F', 'G', 'G', 'F', 'F', 'F'],
 'points': [5, 7, 7, 9, 12, 9, 9, 4, 7, 7],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12, 13, 15]})

#view DataFrame
df

 team position points rebounds
0 A G 5 11
1 A G 7 8
2 A G 7 10
3 A F 9 6
4 A F 12 6
5 B G 9 5
6 B G 9 9
7 B F 4 12
8 B F 7 13
9 B F 7 15

Пример 1: группировка по одному столбцу и подсчет уникальных значений

В следующем коде показано, как подсчитать количество уникальных значений в столбце «очки» для каждой команды:

#count number of unique values in 'points' column grouped by 'team' column
df.groupby('team')['points']. nunique ()

team
A 4
B 3
Name: points, dtype: int64

Из вывода мы видим:

  • Для команды А существует 4 уникальных значения «очков».
  • Есть 3 уникальных значения «очков» для команды B.

Обратите внимание, что мы также можем использовать функцию unique() для отображения каждого уникального значения «очков» по команде:

#display unique values in 'points' column grouped by 'team'
df.groupby('team')['points']. unique ()

team
A [5, 7, 9, 12]
B [9, 4, 7]
Name: points, dtype: object

Пример 2: группировка по нескольким столбцам и подсчет уникальных значений

В следующем коде показано, как подсчитать количество уникальных значений в столбце «очки», сгруппированных по командам и позициям:

#count number of unique values in 'points' column grouped by 'team' and 'position'
df.groupby(['team', 'position'])['points']. nunique ()

team position
A F 2
 G 2
B F 2
 G 1
Name: points, dtype: int64

Из вывода мы видим:

  • Есть 2 уникальных значения «очков» для игроков на позиции «F» в команде A.
  • Есть 2 уникальных значения «очков» для игроков на позиции «G» в команде A.
  • Есть 2 уникальных значения «очков» для игроков на позиции «F» в команде B.
  • Существует 1 уникальное значение «очков» для игроков на позиции «G» в команде B.

Еще раз, мы можем использовать функцию unique() для отображения каждого уникального значения «очков» по командам и позициям:

#display unique values in 'points' column grouped by 'team' and 'position'
df.groupby(['team', 'position'])['points']. unique ()

team position
A F [9, 12]
 G [5, 7]
B F [4, 7]
 G [9]
Name: points, dtype: object

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

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

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