Коротко
duplicated()— маска:Trueу строки, которая повторяет уже встречавшуюся.drop_duplicates()удаляет повторы и возвращает новую таблицу.subset— какие столбцы сравнивать; без него сравниваются все.keep="first"(по умолчанию) оставляет первое вхождение,"last"— последнее,False— помечает или удаляет все повторяющиеся строки.- Число повторов —
duplicated().sum().
Синтаксис
df.duplicated(subset=None, keep="first")
df.drop_duplicates(subset=None, keep="first", ignore_index=False)Параметры
ПараметрЧто делаетПо умолчанию
subsetстолбец или список столбцов для сравнениявсе столбцыkeep"first", "last" или False — какие вхождения не считать повтором"first"ignore_indexв drop_duplicates: новый индекс 0, 1, 2…FalseПримеры
visits = pd.DataFrame({
"user": ["ann", "bob", "ann", "kate", "bob", "ann"],
"page": ["/home", "/cart", "/home", "/home", "/pay", "/cart"],
"time": ["10:00", "10:02", "10:05", "10:06", "10:07", "10:09"],
})visits.duplicated(subset=["user", "page"]) # True — повтор уже встречавшейся парыВывод
0 False 1 False 2 True 3 False 4 False 5 False dtype: bool
visits.duplicated(subset=["user", "page"]).sum()Вывод
np.int64(1)
visits.drop_duplicates(subset=["user", "page"]) # оставить первое вхождениеВывод
user page time 0 ann /home 10:00 1 bob /cart 10:02 3 kate /home 10:06 4 bob /pay 10:07 5 ann /cart 10:09
visits.drop_duplicates(subset="user", keep="last") # последнее посещение каждого пользователяВывод
user page time 3 kate /home 10:06 4 bob /pay 10:07 5 ann /cart 10:09
visits[visits.duplicated(subset="user", keep=False)] # все строки пользователей с повторамиВывод
user page time 0 ann /home 10:00 1 bob /cart 10:02 2 ann /home 10:05 4 bob /pay 10:07 5 ann /cart 10:09
visits.drop_duplicates(subset="user", ignore_index=True)Вывод
user page time 0 ann /home 10:00 1 bob /cart 10:02 2 kate /home 10:06
Подводные камни
Без subset повторов может не найтись
Если хотя бы один столбец различается (например, время), строки не считаются дубликатами. Укажите, по каким столбцам строка «та же самая».
visits.duplicated().sum() # без subset сравниваются все столбцыВывод
np.int64(0)