Pandas — это мощная библиотека для обработки данных в Python. Частая задача заключается в определении количества уникальных значений внутри различных групп вашего набора данных. В этой статье будут рассмотрены три эффективных метода Pandas для решения этой задачи: groupby().nunique()
, groupby().agg()
и groupby().unique()
. Каждый метод будет продемонстрирован на наглядных примерах.
Оглавление
Метод groupby().nunique()
Метод nunique()
, используемый после операции groupby()
, напрямую предоставляет количество уникальных значений для каждой группы. Это часто самый эффективный и лаконичный подход.
Рассмотрим этот пример DataFrame:
import pandas as pd
data = {'Group': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
'Value': ['X', 'Y', 'X', 'Z', 'Z', 'X', 'Y', 'Z', 'X']}
df = pd.DataFrame(data)
print(df)
Это дает:
Group Value
0 A X
1 A Y
2 A X
3 B Z
4 B Z
5 C X
6 C Y
7 C Z
8 C X
Чтобы подсчитать уникальные значения ‘Value’ для каждой ‘Group’, используйте:
unique_counts = df.groupby('Group')['Value'].nunique()
print(unique_counts)
Результат:
Group
A 2
B 1
C 3
Name: Value, dtype: int64
Это показывает, что группа ‘A’ имеет 2 уникальных значения, ‘B’ имеет 1, а ‘C’ имеет 3.
Метод groupby().agg()
Метод agg()
предлагает большую гибкость, позволяя применять несколько агрегатных функций одновременно. Мы можем использовать его с nunique()
для подсчета уникальных значений, а также с другими функциями, если необходимо.
Используя тот же DataFrame:
aggregated_data = df.groupby('Group')['Value'].agg(['nunique', 'count'])
print(aggregated_data)
Результат:
nunique count
Group
A 2 3
B 1 2
C 3 4
Это показывает как количество уникальных значений (nunique
), так и общее количество значений (count
) для каждой группы. Это полезно для более всестороннего анализа.
Метод groupby().unique()
Метод unique()
возвращает сами уникальные значения для каждой группы, а не их количество. Хотя он не предоставляет напрямую количество, он полезен, если вам нужно увидеть фактические уникальные значения.
unique_values = df.groupby('Group')['Value'].unique()
print(unique_values)
Результат:
Group
A [X, Y]
B [Z]
C [X, Y, Z]
Name: Value, dtype: object
Для получения количества требуется дополнительный шаг:
unique_value_counts = unique_values.apply(len)
print(unique_value_counts)
Это дает тот же результат, что и nunique()
:
Group
A 2
B 1
C 3
Name: Value, dtype: int64
Однако это менее эффективно, чем использование nunique()
напрямую.
Заключение: Для простого подсчета уникальных значений для каждой группы, groupby().nunique()
является наиболее прямым и эффективным методом. groupby().agg()
предлагает большую гибкость для комбинирования nunique()
с другими агрегациями, в то время как groupby().unique()
полезен, когда вам нужно увидеть уникальные значения. Выберите метод, наиболее подходящий для ваших аналитических задач.