Короткий ответ
subset указывает, по каким столбцам искать дубликаты, что критично, когда дубликатом нужно считать совпадение бизнес-ключа (например, order_id), а не полное совпадение всех столбцов.
Как это работает подробнее
без subset drop_duplicates сравнивает все столбцы, и строки, отличающиеся хотя бы в одном поле, не считаются дубликатами; с subset=['order_id'] сравнение идёт только по указанным столбцам, и строки с одинаковым order_id, но разными прочими полями, всё равно будут признаны дубликатами.
Пример кода
Пример Python
import pandas as pd
df = pd.DataFrame({
'order_id': [1, 1, 2],
'status': ['created', 'paid', 'created'],
'updated_at': ['2024-01-01', '2024-01-02', '2024-01-01']
})
by_key = df.drop_duplicates(subset=['order_id'], keep='last')
print(by_key)Что использовать на практике
- На практике: если order_id должен быть уникальным, но у одной записи обновилось, например, поле status, полное сравнение строк не найдёт дубликат — нужен subset по бизнес-ключу; важно явно решить, какую версию оставить (keep='last' для самой свежей, если есть временная метка).
- Проверка: итоговая таблица содержит по одной строке на order_id, причём для order_id=1 остаётся строка со статусом 'paid' как последняя по порядку в данных.
Подводные камни
- Частые ошибки: проверяют уникальность только полным сравнением строк и делают вывод "дубликатов нет", хотя по бизнес-ключу дубликаты есть, просто отличаются неключевые поля; забывают отсортировать данные по времени обновления перед keep='last', из-за чего "последняя" строка определяется случайным порядком в файле, а не реальной хронологией.