【发布时间】:2018-09-27 02:13:07
【问题描述】:
我有两个数据集 df1 和 df2 ,都有以下列:
|city |state |address_id |address |postal_code
|A |X |10 |flat 123,abc lane |400000
我想根据 df2 中是否存在类似地址,为 df1 中的每个 address_id 创建一个二进制标志。我的原始数据集非常大(df1= 5k 行,df2= 200K 行)。我在小数据样本上尝试了以下代码集:
for i in df1.index:
v=[]
for j in df2.index:
vi = df1.get_value(i, 'address')
vj = df2.get_value(j, 'address')
v.append(max(fuzz.ratio(vi, vj),
fuzz.partial_ratio(vi, vj),
fuzz.token_sort_ratio(vi, vj),
fuzz.token_set_ratio(vi, vj)))
vmax=max(v)
if vmax>=80:
df1.loc[i,'flag']='Y'
else:
df1.loc[i,'flag']='N'
但这不适用于更大的数据集。有没有办法优化这个? postal_code 可以用作模糊匹配时的条件,以减少迭代次数。另外,也许我可以在达到 v=80 时立即停止迭代。
for i in df1.index:
v=1
while v<=80:
for j in df2.index:
vi = df1.get_value(i, 'address')
vj = df2.get_value(j, 'address')
v= max(fuzz.ratio(vi, vj),
fuzz.partial_ratio(vi, vj),
fuzz.token_sort_ratio(vi, vj),
fuzz.token_set_ratio(vi, vj))
if v>=80:
df1.loc[i,'flag']='Y'
else:
df1.loc[i,'flag']='N'
刚开始使用 python,所以有点卡在这里。请帮忙!
【问题讨论】:
标签: python pandas fuzzywuzzy