Data Analysis

Эффективный подсчёт уникальных значений по группам в Pandas

Spread the love

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() полезен, когда вам нужно увидеть уникальные значения. Выберите метод, наиболее подходящий для ваших аналитических задач.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *