【发布时间】:2021-11-23 23:31:01
【问题描述】:
我的目标是根据 2 个单独的数据框匹配地址信息。一个数据帧包含唯一值,而另一个数据帧不包含。我想从 df1 中获取唯一键,然后根据模糊匹配的相似程度将其复制到 df2。
这是一个例子:
df1 =
index address_df1 unique key call # Name Sales amount
(value I want to copy)
1 123 nice road Uniquekey1 11 jim bob 8
2 150 spring drive Uniquekey2 151 jane doe 8213
3 240 happy lane Uniquekey3 71 michael scott 909
4 80 sad parkway Uniquekey4 1586 tracey jackson 109
5 122 big lane Uniquekey5 161 lulu buzz 99
6 315 small pk Uniquekey6 586 tinker bell 11
7 13 round rd ste 10 Uniquekey7 8601 jack ryan 681
8 97 square rd Uniquekey8 66 peter paul 61968
df2 (*note address column in different place) =
index cost center country address_df2
1 1111 us 123 nice rd
2 1111 us 97 square rd
3 1112 us 13 round rd
4 1112 us 150 spring dr
我希望最终的数据框看起来像这样:
RESULT
df3 (with unique key) =
index cost center(df2) country(df2) address_df2 **unique key(from df1)** fuzzy match %
1 1111 us 123 nice rd Uniquekey1 90%
2 1111 us 97 square rd Uniquekey8 90%
3 1112 us 13 round rd Uniquekey7 90%
4 1112 us 150 spring dr Uniquekey2 90%
我试过了:
from fuzzywuzzy import process
THRESHOLD = 90
best_match = \
df2['address_df2'].apply(lambda x: process.extractOne(x, df1['address_df1'],
score_cutoff=THRESHOLD))
我能够使用此代码找到匹配项,而且非常棒!但是,当我去合并两个数据框时,我无法获得匹配的地址。我认为来自 df1 的数据并没有对地址进行排序或匹配。
我已尝试使用此代码(如下)来匹配 2 个 dfs,但同样,地址未对齐。所以最终发生的是唯一 id 不正确。
df3 = pd.merge(df2, df1.set_index(best_match.apply(pd.Series)[2]),
left_index=True, right_index=True, how='left')
【问题讨论】:
标签: python pandas dataframe fuzzywuzzy