duplicated() в pandas — поиск дубликатов строк

duplicated() помечает True строки, которые уже встречались ранее, и возвращает булеву Series. Параметр subset задаёт, по каким колонкам считать дубли, а keep — какую копию оставить непомеченной. Это первый шаг проверки качества данных перед дедупликацией через drop_duplicates.

Синтаксис

DataFrame.duplicated(subset=None, keep='first')

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

Пример 1: Сколько дублей в данных

df.duplicated().sum()                    # полностью одинаковые строки
df.duplicated(subset='order_id').sum()   # повторы order_id

Результат:

4
12

Пример 2: Показать все дубли по user_id и date

dups = df.duplicated(subset=['user_id', 'date'], keep=False)
df.loc[dups, ['user_id', 'date', 'amount']].sort_values('user_id').head(4)

Результат:

    user_id        date  amount
3        42  2026-01-05  1200.0
7        42  2026-01-05   300.0
15       88  2026-01-06   450.0
22       88  2026-01-06   450.0
Порешать Python-задачи в тренажёре →

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

keep='first' (по умолчанию) помечает как дубли все повторы, кроме первого, keep='last' — кроме последнего, а keep=False помечает True все копии, включая первую — это нужно, чтобы увидеть весь набор дублей. Без subset строка считается дублем только при совпадении по всем колонкам, поэтому один разный amount уже делает строки уникальными.

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

Используют для аудита выгрузок (не задвоились ли заказы после join), поиска повторных регистраций и подготовки к drop_duplicates. На собеседовании просят объяснить разницу keep='first' и keep=False.

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

Как найти все дубли, включая первое вхождение?

Передайте keep=False: тогда True получат все строки, у которых есть хотя бы одна копия. Это удобно, чтобы вывести полный набор задвоенных записей на проверку. При keep='first' первая копия осталась бы непомеченной.

Как считать дубли только по части колонок?

Укажите subset со списком колонок, например subset=['user_id', 'date']. Тогда совпадение проверяется только по ним, а остальные колонки игнорируются. Без subset учитываются все колонки строки.

Чем duplicated отличается от drop_duplicates?

duplicated возвращает булеву маску и ничего не удаляет, а drop_duplicates сразу возвращает датафрейм без дублей. Маску удобно использовать, чтобы сначала посмотреть на дубли, а потом решить, что с ними делать. По сути drop_duplicates — это фильтрация по ~duplicated.

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

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

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

Pandas: основы · Pandas groupby

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

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

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