Как подсчитать наблюдения по группе в Pandas


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

К счастью, это легко сделать с помощью функций groupby() и size() со следующим синтаксисом:

df.groupby('column_name'). size ()

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

import numpy as np
import pandas as pd

#create pandas DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'C', 'C'],
 'division':['E', 'W', 'E', 'E', 'W', 'W', 'E'],
 'rebounds': [11, 8, 7, 6, 6, 5, 12]})

#display DataFrame
print(df)

 team division rebounds
0 A E 11
1 A W 8
2 B E 7
3 B E 6
4 B W 6
5 C W 5
6 C E 12

Пример 1: подсчет по одной переменной

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

#count total observations by variable 'team'
df.groupby('team'). size ()

team
A 2
B 3
C 2
dtype: int64

Из вывода мы видим, что:

  • Команда А имеет 2 наблюдения
  • Команда Б имеет 3 наблюдения
  • Команда C имеет 2 наблюдения

Обратите внимание, что предыдущий код создает Series. В большинстве случаев мы хотим работать с DataFrame, поэтому вместо этого мы можем использовать функцию reset_index() для создания DataFrame:

df.groupby('team'). size().reset_index(name='obs')

 team obs
0 A 2
1 B 3
2 C 2

Пример 2: подсчет и сортировка по одной переменной

Мы также можем использовать функцию sort_values() для сортировки количества групп.

Мы можем указать по возрастанию=False для сортировки количества групп от наибольшего к наименьшему или по возрастанию=True для сортировки от наименьшего к наибольшему:

df.groupby('team'). size().reset_index(name='obs'). sort_values(['obs'], ascending= True )

 team obs
0 A 2
2 C 2
1 B 3

Пример 3: подсчет по нескольким переменным

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

#count observations grouped by team and division
df.groupby(['team', 'division']). size().reset_index(name='obs')

 team division obs
0 A E 1
1 A W 1
2 B E 2
3 B W 1
4 C E 1
5 C W 1

Из вывода мы видим, что:

  • 1 наблюдение принадлежит команде A и дивизиону E
  • 1 наблюдение принадлежит Команде А и Дивизиону W
  • 2 наблюдения принадлежат команде B и дивизиону E
  • 1 наблюдение принадлежит команде B и дивизиону W
  • 1 наблюдение принадлежит команде C и дивизиону E
  • 1 наблюдение принадлежит команде C и дивизиону W

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

Как рассчитать сумму столбцов в Pandas
Как рассчитать среднее значение столбцов в Pandas
Как найти максимальное значение столбцов в Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.