Python 在数据集中查找部分重复项的有效方法

Python 在数据集中查找部分重复项的有效方法,python,r,pandas,dataframe,duplicates,Python,R,Pandas,Dataframe,Duplicates,我有一个很大的数据集(约20000行),其中包括人员及其信息,我正在寻找一种方法来识别此数据集中潜在的重复人员。这些副本不一定是完全匹配的,因为它们是手动输入的,有些包含打字错误 ex) 在这种情况下,需要将第1行和第3行以及第2行和第5行标记为重复。我能想到的唯一解决方案是O(n^2),它包括对数据集中的每条记录遍历整个数据集,比较部分匹配的字段,并在满足匹配条件时标记行 有没有更优雅的解决方案 为清晰起见进行编辑:可能所有字段都不包含精确匹配。人们很快就手工输入了所有这些人,因此有很多机会输

我有一个很大的数据集(约20000行),其中包括人员及其信息,我正在寻找一种方法来识别此数据集中潜在的重复人员。这些副本不一定是完全匹配的,因为它们是手动输入的,有些包含打字错误

ex)

在这种情况下,需要将第1行和第3行以及第2行和第5行标记为重复。我能想到的唯一解决方案是O(n^2),它包括对数据集中的每条记录遍历整个数据集,比较部分匹配的字段,并在满足匹配条件时标记行

有没有更优雅的解决方案

为清晰起见进行编辑:可能所有字段都不包含精确匹配。人们很快就手工输入了所有这些人,因此有很多机会输入错误信息

      LastName MiddleName FirstName DOB
1   John-adams    T.        Samuel  1/15/2021 
2   Jhon-adams   Tom        Sam     10/15/2021

这两行应标记为潜在的重复项。

部分匹配的标准是什么?至少有一个字段在两个不同的行中是相同的?
O(n)
解决方案是:遍历数据一次并执行数据清理:即强制执行类似DOB的
1/1/2004
显示为
01/01/2004
。将所有中间名转换为中间首字母,从姓氏中删除jr等。。。。这种清洁在这方面对你有帮助,它可能会帮助你今后的其他目的。然后您可以遍历并找到精确的匹配项(可能允许在比较时忽略NaN)。另一个
O(n)
选项是为每列创建一个
set()
。然后,迭代每一行,检查每一列中的值是否已经存在于其各自的列集中(这是一个
O(1)
操作)。如果存在行号,则可以打印行号或将行号存储为可能的重复行。如果不存在,请在列集合中插入值(这也是一个
O(1)
操作)。@CharlesDupont抱歉,我想我的问题有点不清楚。从技术上讲,没有一个字段是完全匹配的,这就是给我带来麻烦的原因。我当前的解决方案是:对于每一行,比较每一行,确定FName、LName、DOB的部分字符串匹配。如果FName&LName&DOB中至少有2个匹配>80%,我们将相应的行添加到输出数据集中进行手动检查。。。
      LastName MiddleName FirstName DOB
1   John-adams    T.        Samuel  1/15/2021 
2   Jhon-adams   Tom        Sam     10/15/2021