如何将Pandas GroupBy的发现应用于源数据

问题描述

我正在使用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)

接下来,我需要检查每组匹配项(按“群集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

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

这样的问题如何解决?以及从分组检查的数据输出到分组集合数据帧之外如何传递?必须有正确的方法...?

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

RowID |名字|姓

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

示例数据输出: RowID |名字|姓|集群ID |信心| RowClusterHasLeadingCharacterMismatch

12345,1,.9999995,True
24385,.999992,True

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

解决方法

在上面的评论中看到了耶斯拉的答案:

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

使用

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

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