#python #pandas #duplicates
#python #pandas #дубликаты
Вопрос:
У меня есть набор данных, в котором я хочу реализовать три уровня проверок
а) если все значения в Col B являются дубликатами, тогда print(«все дубликаты»)
б) если последние 8 значений в Col B являются дубликатами, тогда print («последние 8 дубликатов»)
в) если последние 5 значений в Col B являются дубликатами, тогда print («последние 5 дубликатов»)
Фрейм данных:
Col A Col B
0 XYZ 452
1 ZXP 452
2 ABZ 452
3 CDP 452
4 XEF 452
5 ZRT 452
6 XXX 452
7 YYY 452
8 DDD 452
9 EEE 452
10 FFF 452
11 ZZA 452
Сначала я пробовал случай со всеми дубликатами:
if df.['Col B'].duplicated.all():
print("all dupes")
elif df.['Col B'].tail(8).duplicated.all():
print("last 8 dupes")
elif df.['Col B'].tail(5).duplicated.all():
print("last 5 dupes")
else:
print("no dupes")
но это сразу переходит к «без дубликатов».
Ответ №1:
Я думаю, вам нужно изменить, удалив .
и добавив ()
Series.duplicated()
, если нужно проверить все дубликаты, добавьте keep=False
параметр:
df.['Col B'].duplicated.all()
Для:
df['Col B'].duplicated(keep=False).all()
Все вместе:
if df['Col B'].duplicated(keep=False).all():
print("all dupes")
elif df['Col B'].tail(8).duplicated(keep=False).all():
print("last 8 dupes")
elif df['Col B'].tail(5).duplicated(keep=False).all():
print("last 5 dupes")
else:
print("no dupes")
Вы можете протестировать столбец только один раз, а затем выбрать последние значения маски m
:
m = df['Col B'].duplicated(keep=False)
if m.all():
print("all dupes")
elif m.tail(8).all():
print("last 8 dupes")
elif m.tail(5).all():
print("last 5 dupes")
else:
print("no dupes")
Комментарии:
1. Спасибо, израэль, я совершенно неверно истолковал объяснение параметра keep=False в документации, очень признателен.
Ответ №2:
Вы можете сделать:
import numpy as np
if len(np.unique(df['Col B']))==1:
print("All dupes")
elif len(np.unique(df['Col B'].tail(8)))==1:
print("last 8 dupes")
elif len(np.unique(df['Col B'].tail(5)))==1:
print("last 5 dupes")
else:
print("no dupes")
Комментарии:
1. спасибо, не подумал о подходе np 🙂
Ответ №3:
Обратите внимание, что дублированный метод DataFrame может принимать метку столбца, поэтому вы можете использовать его следующим образом:
import pandas as pd
df = pd.DataFrame({'A':['XYZ','ZXP','ABZ'],'B':[452,452,452]})
print(df.duplicated('B', keep=False).all())
Вывод:
True
Комментарии:
1. в вашем ответе была часть параметра keep = False, также в соответствии с ответом Израэля выше, спасибо за ваше время 🙂