Вот что я предлагаю. Во-первых, полное декартово соединение двух dfs:
df1.loc[:, 'MergeKey'] = 1 #create a mergekey
df2.loc[:, 'MergeKey'] = 1 #it is the same for both so that when you merge you get the cartesian product
#merge them to get the cartesian product (all possible combos)
merged = df1.merge(df2, on = 'MergeKey', suffixes = ['_1', '_2'])
Затем рассчитайте коэффициент пуха для каждой комбинации:
def fuzzratio(row):
try: #avoid errors for example on NaN's
return fuzz.ratio(row['Billing Country_1'], row['Billing Country_2'])
except:
return 0. #you'll want to expiriment w/o the try/except too
merged.loc[:, 'Ratio'] = merged.apply(fuzzratio, axis = 1) #create ratio column by applying function
Теперь у вас должен быть df с соотношением между всеми возможными комбинациями df1['Billing Country']
и df2['Billing Country']
. Оказавшись там, просто отфильтруйте, чтобы получить те, где соотношение составляет 100%:
result = merged[merged.Ratio ==1]
person
Sam
schedule
03.05.2016