Pandas — мощная библиотека Python для анализа данных, и частая задача включает определение частоты значений в DataFrame. В этой статье рассматриваются три эффективных метода подсчета частоты значений: value_counts()
, groupby().size()
и groupby().count()
. Мы рассмотрим каждый метод, подчеркнув их сильные и слабые стороны, и предоставим наглядные примеры.
Оглавление
Метод Series.value_counts()
Метод value_counts()
— самый простой и эффективный способ подсчета частоты значений в одном столбце (Series). Он возвращает Series, где индекс представляет уникальные значения, а значения — их количество, отсортированные по убыванию по умолчанию. Это идеально подходит, когда вам нужна частота отдельных значений в конкретном столбце.
import pandas as pd
data = {'Category': ['A', 'A', 'B', 'B', 'A', 'C', 'A']}
df = pd.DataFrame(data)
category_counts = df['Category'].value_counts()
print(category_counts)
Вывод:
A 4
B 2
C 1
Name: Category, dtype: int64
Метод df.groupby().size()
Метод groupby().size()
предоставляет размер каждой группы (количество строк) после группировки DataFrame. В отличие от groupby().count()
, он не зависит от пропущенных значений в других столбцах; он просто подсчитывает строки в каждой группе. Это идеально подходит для получения простого подсчета вхождений групп.
import pandas as pd
data = {'Category': ['A', 'A', 'B', 'B', 'A', 'C'],
'Value': [1, 2, 1, 1, 2, 3]}
df = pd.DataFrame(data)
category_counts = df.groupby('Category').size()
print(category_counts)
Вывод:
Category
A 3
B 2
C 1
dtype: int64
Метод df.groupby().count()
Метод groupby().count()
универсален, позволяя подсчитывать частоты по нескольким столбцам. Он группирует DataFrame, а затем подсчитывает непустые значения в каждой группе для *всех* столбцов. Это означает, что пропущенные данные повлияют на подсчет. Используйте этот метод, когда вам нужен подсчет по нескольким столбцам, но помните о возможном влиянии пропущенных данных.
import pandas as pd
data = {'Category': ['A', 'A', 'B', 'B', 'A', 'C'],
'Value': [1, 2, 1, 1, 2, 3],
'Value2': [10, 20, 30, 40, 50, 60]}
df = pd.DataFrame(data)
# Подсчет вхождений 'Category' по всем столбцам
category_counts = df.groupby('Category').count()
print(category_counts)
# Фокусировка на одном столбце
category_counts_value = df.groupby('Category')['Value'].count()
print(category_counts_value)
Вывод:
Value Value2
Category
A 3 3
B 2 2
C 1 1
Category
A 3
B 2
C 1
Name: Value, dtype: int64
В заключение, наилучший метод зависит от ваших конкретных потребностей. value_counts()
лучше всего подходит для отдельных столбцов, groupby().size()
— для простого подсчета групп, а groupby().count()
— для более сложных сценариев, включающих несколько столбцов, но требует осторожного обращения с пропущенными значениями.