Вы можете использовать следующий базовый синтаксис для подсчета количества уникальных значений по группам в кадре данных 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: как подсчитать вхождения определенного значения в столбце