如何根据部分字符串匹配将两个数据框连接起来?

时间:2018-07-27 19:35:09

标签: python pandas string-matching

我有两个数据框,并希望基于三个字段ABC来加入它们。但是,AB是数字值,我希望它们在联接/合并中完全匹配,但是C是字符串值,并且我希望至少80%匹配(相似),例如,如果AB在两个数据帧中都具有相同的值,并且第一个数据帧中的C的值是abcde,第二个数据帧中的abcdf我仍然想在我的结果中考虑此记录。如何在python中实现呢?

2 个答案:

答案 0 :(得分:2)

您可以使用fuzzywuzzy

from fuzzywuzzy import fuzz

df1=pd.DataFrame({'A':[1,3,2],'B':[2,2,3],'C':['aad','aac','aad']})

df2=pd.DataFrame({'A':[1,2,2],'B':[2,2,3],'C':['aad','aab','acd']})

mergedf1=df1.merge(df2,on=['A','B'])

mergedf1['ratio']=[fuzz.ratio(x,y) for x, y in zip(mergedf1['C_x'],mergedf1['C_y'])]
mergedf1#score list here , you can cut the data frame by your own limit 
Out[265]: 
   A  B  C_x  C_y  ratio
0  1  2  aad  aad    100
1  2  3  aad  acd     67

答案 1 :(得分:0)

我可能首先只合并A和B,然后过滤掉C列上相似性低的任何行,所以类似:

result = df1.merge(df2, on=['A', 'B'])

# assuming sim is the similarity function that you created to calculate the similarity
idx = result.apply(lambda x: sim(c['C_x', 'C_y']) >= 0.8, axis=1)
result = result[idx]

希望有帮助!