Pandas duplicated и dropduplicates: аудит бизнес-ключа

Дублирование бизнес-ключа и полное совпадение строк — разные проверки. Две строки могут иметь одинаковый идентификатор, но разные атрибуты, и всё равно нарушать уникальность справочника.

Явно задайте subset при поиске повторов. Параметр keep влияет на то, какие экземпляры попадут в маску. Сначала соберите диагностику, затем применяйте выбранное правило удаления: без него легко потерять нужные данные.

Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».

Аудит размерной таблицы: дубли по бизнес-ключу через duplicated и drop_duplicates

Вы реализуете функцию audit_dimension, которая проверяет размерную таблицу на дублирование бизнес-ключа и возвращает компактный аудит-отчёт.

Что уже дано

Проверяющая система вызывает audit_dimension(dim, key_col), передавая:

  • dim — pd.DataFrame, размерная таблица (справочник). Может содержать дубли по столбцу key_col.
  • key_col — строка, имя столбца с бизнес-ключом.

Никаких файлов, глобальных переменных и состояния из других уроков нет.

Что нужно сделать

Реализуйте функцию audit_dimension(dim, key_col), которая выполняет ровно три шага и возвращает словарь.

Шаг 1. Подсчёт дублирующихся строк.
Постройте булеву маску mask_all = dim.duplicated(subset=[key_col], keep=False) — она помечает True все строки, участвующие в дублировании (включая первое вхождение). Посчитайте число таких строк: dup_row_count = int(mask_all.sum()).

Шаг 2. Подсчёт уникальных дублирующихся ключей.
Отберите строки по маске и найдите число уникальных значений ключа среди них: dup_key_count = int(dim.loc[mask_all, key_col].nunique()).

Шаг 3. Дедуплицированная таблица.
Получите чистую таблицу: clean = dim.drop_duplicates(subset=[key_col], keep='first').reset_index(drop=True).

Верните словарь с тремя ключами:

{
 'dup_row_count': dup_row_count, # int: сколько строк участвуют в дублировании
 'dup_key_count': dup_key_count, # int: сколько уникальных ключей задублированы
 'clean': clean # pd.DataFrame: дедуплицированная таблица
}

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система вызывает audit_dimension(dim, key_col) и проверяет возвращаемый словарь. Функция принимает два аргумента:

  • dim — pd.DataFrame;
  • key_col — str, имя столбца с бизнес-ключом.

Функция должна вернуть словарь с ключами 'dup_row_count' (int), 'dup_key_count' (int) и 'clean' (pd.DataFrame с чистым RangeIndex).

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

import pandas as pd

dim = pd.DataFrame({
 'product_id': [1, 2, 2, 3, 3, 3],
 'name': ['A', 'B', 'B2', 'C', 'C2', 'C3'],
})
result = audit_dimension(dim, 'product_id')
print(result['dup_row_count'])
print(result['dup_key_count'])
print(list(result['clean']['product_id']))

Результат:

5
2
[1, 2, 3]
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи