Рассеиваем туман вокруг параметра keep при работе с дубликатами в Pandas
Основными методами для работы с дубликатами в Pandas являются duplicated и drop_duplicates, принимающие набор колонок, по которым определяются дубли и параметр keep. Проясним смысл последнего.
Сначала создадим демонстрационный датафрейм:
import pandas as pd df = pd.DataFrame({'id':[1,2,3,4,5,6,7], 'name':[1,2,2,2,1,4,3]}) df
Многие путаются в назначении параметра keep в разных методах, например, часто оно трактуется "как сохранение в выводе", однако это не так. Корректнее воспринимать keep, как то, что не будет считаться дублем. Например, в методе duplicated он говорит - "не помечай как дубли первые вхождения ('first'), последние ('last'), ничего (False)". Вот результат с keep='first':
df.duplicated('name', keep='first')
Соответственно, проиндексировав датафрейм с duplicated, мы как раз первые повторы (и уникальные значения) в выводе не получим:
df[df.duplicated('name', keep='first')]
Значение keep=False помечает все как дубликаты:
df.duplicated('name', keep=False)
keep=False удобен для изучения всех дублей, часто его применяют вместе с сортировкой по повторам, чтобы визуально было легче их сравнивать:
df[df.duplicated('name', keep=False)].sort_values(by='name')
Для drop_duplicates отсутствие метки дубля будет означать, что такое значение не удалится (сохранится):
df.drop_duplicates('name', keep='first')
df.drop_duplicates('name', keep=False)
Таким образом, параметр keep трактуем, как определяющий, что не помечать как повтор, а итоговый результат уже зависит от конкретного метода - либо удаляющего все повторы, либо просто отмечающего меткой True.