0

我正在使用 pandas de_dupe 进行名称重复数据删除,并且有多个步骤。

首先,我对源数据进行训练和重复数据删除。

deDupedNames = dedupe_dataframe( sourceData, columnsOfInterest, config_name=configName)

接下来我丢弃集群只有 1 个参与者的数据集

dedupedComplexSets = dedupe_df_sorted.groupby( ['cluster id']).filter(lambda x: len(x) > 1)

接下来,我需要检查每组匹配项(按“cluster id”分组)并确认每组中至少前 3 个字符是相同的。我通过遍历 dedupedComplexSets 中的每个组并通过每个Surname的前三个字符进一步对每个组的内容进行分组来做到这一点。

for name, group in dedupedComplexSetsGrouped:
    bySurnamePrefix = group.groupby(group.Surname.str[:3]).size()

最后,我想标记属于重复数据删除集群的每一行,其中姓氏“开头”的数量> 1

for name, group in dedupedComplexSetsGrouped:
    bySurnamePrefix = group.groupby(group.Surname.str[:3]).size()

    if( len( bySurnamePrefix) > 1):
        dedupedComplexSets[group, 'RowClusterHasLeadingCharacterMismatch'] = True

但是,由于“可变哈希”错误或其他错误,我无法写回原始数据帧。

像这样的问题是如何解决的?以及如何在 Grouped Set 数据框之外传达组检查的输出?一定有正确的方法……?

(其中 RowClusterHasLeadingCharacterMismatch 是脚本列)中的示例数据:

行 ID|名字|姓氏

12345, fred, surname, false, 
24385, frred, surname, false, 

输出示例数据:RowID|FirstName|Surname|cluster id|confidence|RowClusterHasLeadingCharacterMismatch

12345, fred, surname, false, 1, .9999995, True
24385, frred, surname, false, 1, .999992, True

请注意,我使用 RowClusterHasLeadingCharacterMismatch 作为记录不匹配的一种方式。也许有更有效的方法来做到这一点?

4

1 回答 1

0

如以上评论所示,来自耶斯雷尔的回答:

代替: dedupedComplexSets[group, 'RowClusterHasLeadingCharacterMismatch'] = True to

dedupedComplexSets.loc[group.index, 'RowClusterHasLeadingCharacterMismatch'] = True

我的评论:对 dedupedComplexSets 所做的更改将反映在dedupedComplexSets中,并且可以保存到 CSV。

于 2020-10-26T22:12:28.777 回答