[英]How would I join two dataframe based on a partial string match?
我有兩個數據框,希望基於三個字段A
, B
和C
來加入它們。 但是, A
和B
是數值,我希望它們在聯接/合並中完全匹配,但是C
是字符串值,並且我希望至少80%匹配(相似性),即,如果A
和B
在兩個數據幀中都具有相同的值而第一個數據幀中C
的值是abcde
,第二個數據幀中的C
的值是abcdf
我仍然想在結果中考慮該記錄。 如何在python中實現呢?
您可以使用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
我可能首先只在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]
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.