我有两个数据集df1和df2,都有以下列:
|city |state |address_id |address |postal_code
|A |X |10 |flat 123,abc lane |400000
我想根据df2中是否存在相似的地址为df1中的每个地址_id创建一个二进制标志。我的原始数据集非常大(df1=5k行,df2=200K行)。我在小数据样本上尝试了以下代码集:
^{pr2}$但这在更大的数据集上不起作用。有什么方法可以优化这一点吗?邮政编码可以作为模糊匹配时的条件,以减少迭代次数。另外,也许我可以在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,有点困在这里。请帮忙!在
我尝试了两个df的模糊比较,就我的研究而言,没有快速的方法来做。使用4
fuzz
方法也会降低脚本的速度。一种方法是使用'工艺提取酮()`并创建一个函数:然后要在
^{pr2}$df1
中创建列标志,请执行以下操作:注意:名称
df2
不是作为函数的参数调用的,这不是一种更干净的方式,但是如果在代码中使用这个名称定义它,它就可以工作了。在如果您想保留4
fuzz
方法,那么可以按照相同的想法创建函数:然后:
相关问题 更多 >
编程相关推荐