我有两个要匹配的大熊猫数据帧,其中包括彼此相对相似的两列,我们将它们称为name
和address
。但是,两个数据框中的name列并不总是包含全名。我想搜索每个名称列的子字符串,并返回潜在匹配项的列表。
我以前查看过此Stack Overflow帖子,推荐使用熊猫str.extract
和insert
方法。我的代码看起来像
pat = "|".join(left_df.name)
right_df.insert(0,'name_substring',right_df.name.str.extract("(" + pat + ')', expand=False)
pat = "|".join(right_df.name)
left_df.insert(0,'name_substring',left_df.name.str.extract("(" + pat + ')', expand=False)
left_within = left_df.merge(right_df, left_on=['name_substring','address'], right_on=['name', 'address'])
right_within = left_df.merge(right_df, right_on=['name_substring','address'], left_on=['name', 'address'])
merged_df = pd.concat([left_df, right_df], axis=0)
此方法产生了一些良好的结果,但是使用SAS find
函数运行相同分析的同事能够产生更多潜在匹配。我最初的想法是,这种方法假定每个数据帧中的每个记录只能有一个潜在的匹配项,而str.extract
方法仅搜索子字符串的第一个实例,而实际上可以有多个。
感谢您对获取我的python代码以获得更全面结果的建议。