Метод value_counts
Метод value_counts применяется к объекту GroupBy
и возвращает серию с количеством вхождений каждого уникального
значения внутри каждой группы. Первым параметром можно указать
столбец или подстроку для подсчета. Если параметр не указан,
подсчет выполняется по всем столбцам группировки.
По умолчанию результат сортируется по убыванию частот.
Синтаксис
groupby_object.value_counts(subset=None, normalize=False, sort=True, ascending=False, dropna=True)
Пример
Создадим таблицу и сгруппируем данные по столбцу a,
затем подсчитаем частоты значений в столбце b:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'b': [10, 20, 10, 20, 20, 30, 10, 10, 30]
})
grouped = df.groupby('a')
res = grouped.value_counts(subset='b')
print(res)
Результат выполнения кода:
a b
1 10 2
20 1
2 20 2
30 1
3 10 2
30 1
dtype: int64
Пример
Используем параметр normalize для получения
относительных частот вместо абсолютных:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'b': [10, 20, 10, 20, 20, 30, 10, 10, 30]
})
grouped = df.groupby('a')
res = grouped.value_counts(subset='b', normalize=True)
print(res)
Результат выполнения кода:
a b
1 10 0.666667
20 0.333333
2 20 0.666667
30 0.333333
3 10 0.666667
30 0.333333
dtype: float64
Пример
Отключим сортировку результатов, чтобы сохранить порядок появления значений:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, 20, 10, 30, 20, 30]
})
grouped = df.groupby('a')
res = grouped.value_counts(subset='b', sort=False)
print(res)
Результат выполнения кода:
a b
1 10 1
20 1
2 10 1
30 1
3 20 1
30 1
dtype: int64
Пример
Исключим пропущенные значения из подсчета с помощью
параметра dropna:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3, 3],
'b': [10, np.nan, 20, np.nan, 10, 20]
})
grouped = df.groupby('a')
res = grouped.value_counts(subset='b', dropna=False)
print(res)
Результат выполнения кода:
a b
1 10.0 1
NaN 1
2 20.0 1
NaN 1
3 10.0 1
20.0 1
dtype: int64