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