首页 > 解决方案 > Pandas - 检查重复项

问题描述

我有一个数据集,我想实现三层检查

a) 如果 Col B 中的所有值都是重复的,则 print("all dupes")
b) 如果 Col B 中的最后 8 个值是重复的,则 print("last 8 are dupes")
c) 如果 Col B 中的最后 5 个值是重复的然后打印(“最后 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")

但它直接进入“没有欺骗”。

标签: pythonpandasduplicates

解决方案


我认为你需要通过 remove.和 add ()for来改变Series.duplicated(),如果需要测试所有重复的 addkeep=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")

您只能测试列一次,然后选择 mask 的最后一个值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")

推荐阅读