nunique() в pandas — подсчёт уникальных значений

nunique() возвращает число различных значений — например, сколько уникальных пользователей стоит за заказами. По умолчанию NaN не считается за отдельное значение. У DataFrame метод считает уникальные по каждой колонке, а в groupby — внутри каждой группы, что делает его рабочей лошадкой продуктовой аналитики.

Синтаксис

Series.nunique(dropna=True) # DataFrame.nunique(axis=0, dropna=True)

Примеры использования

Пример 1: Кардинальность по всем колонкам

df.nunique()

Результат:

order_id    5000
user_id     1000
channel        3
amount       870
dtype: int64

Пример 2: Уникальные пользователи по каналам

df.groupby('channel')['user_id'].nunique()

Результат:

channel
ads         420
organic     610
referral     95
Name: user_id, dtype: int64

Пример 3: Учитывать ли пропуски (dropna)

df['channel'].nunique(), df['channel'].nunique(dropna=False)

Результат:

(3, 4)
Порешать Python-задачи в тренажёре →

Типичная ошибка

По умолчанию dropna=True, поэтому NaN в число уникальных не входит — задайте dropna=False, если пропуск считается отдельной категорией. nunique считает уникальные, а не число строк: для строк есть count и len. На очень больших Series он не самый быстрый, но идиоматичный и читаемый.

Где спрашивают на собеседовании

Незаменим для оценки кардинальности признака (стоит ли делать category), подсчёта уникальных пользователей/сессий и проверки, не размножились ли строки после merge. Частый вопрос на собесе: разница между count, size и nunique.

FAQ: частые вопросы про nunique

Чем nunique отличается от count?

count возвращает число непустых значений (строк), а nunique — число различных значений среди них. Для колонки из [a, a, b] count даст 3, а nunique — 2. Их часто путают в задачах на воронки.

Как посчитать уникальных пользователей в каждой группе?

Используйте groupby с nunique: df.groupby('channel')['user_id'].nunique(). Это вернёт число уникальных user_id внутри каждого канала. В agg можно комбинировать с другими функциями через словарь.

Считает ли nunique значения NaN?

Нет, по умолчанию dropna=True и пропуски не учитываются. Чтобы NaN считался отдельным уникальным значением, передайте dropna=False. Это меняет результат, если в колонке есть пропуски.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas groupby · Pandas: основы

Другие функции pandas

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

Открыть Python-тренажёр (556 задач) →