问题描述
我正在使用python的recordlinkage
工具包来对来自两个dataframes
,df1
和df2
的学校名称列进行字符串匹配,同时阻止它们公共列'division'
。
我的代码如下:
import recordlinkage
from recordlinkage.standardise import clean
indexer = recordlinkage.Index()
indexer.block('division')
candidate_links_2 = indexer.index(df1,df2)
compare = recordlinkage.Compare()
compare.string('school_name','school_name',method='jaro',threshold=0.95)
compare_vectors_2 = compare.compute(candidate_links_2,df1,df2)
matches_2 = compare_vectors_2[compare_vectors_2[0]==1.0]
matches_2.reset_index(inplace=True)
matches_2 = matches_2.rename(columns={'level_0': 'df1_index','level_1': 'df2_index',0: 'match'})
matches_duplicates_dropped_2 = matches_2.drop_duplicates(subset = ['df1_index'],keep = 'last')
matches_duplicates_dropped_2
使用此代码,我得到了一些不匹配的匹配-
df1_index df2_index match df1_school df2_school
2 15136 26636 1.0 girls middle 34sp girls middle 53sp
4 15137 26636 1.0 girls middle 34sp girls middle 53sp
7 15148 26636 1.0 girls middle 35sp girls middle 53sp
10 15149 26636 1.0 girls middle 35sp girls middle 53sp
... ... ... ... ... ...
43794 64087 6601 1.0 islamabad model i v2 i 91ii islamabad model i v2 i 101ii
我想创建一个单独的规则,其中school_name中是否有数字,例如'girls middle 35sp'
具有数字35
等,数字必须是“完全匹配” ,因此'girls middle 35sp'
应仅与匹配'girls middle 35sp'
,并且不应与 'girls middle 53sp'
等匹配。
我想知道这是否有可能,或者为此目的是否有更好的工具包。