更快地查找两个数据帧列-Python/Way

更快地查找两个数据帧列-Python/Way,python,python-3.x,pandas,performance,Python,Python 3.x,Pandas,Performance,我有两个数据帧,每个数据帧大约有250K行。我试图在两个数据框的列之间进行模糊查找。在查找之后,我需要那些与阈值良好匹配的索引 以下是一些细节 Mydf1: Name State Zip combined_1 0 Auto MN 10 Auto,MN,10 1 Rtla VI 253 Rtla,VI,253 2 Huka CO 56218

我有两个数据帧,每个数据帧大约有250K行。我试图在两个数据框的列之间进行模糊查找。在查找之后,我需要那些与阈值良好匹配的索引

以下是一些细节

My
df1

   Name     State      Zip        combined_1
0  Auto     MN            10      Auto,MN,10 
1  Rtla     VI           253      Rtla,VI,253  
2  Huka     CO         56218      Huka,CO,56218
3  kann     PR           214      Kann,PR,214
4  Himm     NJ         65216      Himm,NJ,65216
5  Elko     NY         65418      Elko,NY,65418
6  Tasm     MA            13      Tasm,MA,13
7  Hspt     OH         43218      Hspt,OH,43218
我的另一个数据帧,我正在努力寻找

   Name     State      Zip        combined_2
0  Kilo     NC         69521      Kilo,NC,69521 
1  Kjhl     FL          3369      Kjhl,FL,3369
2  Rtla     VI         25301      Rtla,VI,25301
3  Illt     GA         30024      Illt,GA,30024
4  Huka     CO         56218      Huka,CO,56218
5  Haja     OH         96766      Haja,OH,96766
6  Auto     MN           010      Auto,MN,010
7  Clps     TX         44155      Clps,TX,44155
如果你仔细观察,当我进行模糊查找时,我应该会从
df2
索引6,4中获得索引0和2的良好匹配

所以我做了这个,

from fuzzywuzzy import fuzz
# Save df1 index
df_1index = []

# save df2 index
df2_indexes = []

# save fuzzy ratio
fazz_rat = []

for index, details in enumerate(df1['combined_1']):
    for ind, information in enumerate(df2['combined_2']):
        fuzmatch = fuzz.ratio(str(details), str(information))
        if fuzmatch >= 94:
            df_1index.append(index)
            df2_indexes.append(ind)
            fazz_rat.append(fuzmatch)

        else:
            pass
正如我所预料的,我得到了这个例子的结果

df_1index
>> [0,2]

df2_indexes
>> [6,4]
要在两个数据帧中运行250K*250K行,需要花费大量时间


如何加快查找过程?有没有pandas或python方法来提高性能

这是一个难题。也许考虑修剪不必要的比较,也就是说,名称和邮编可能不同,但是有没有理由怀疑2字符状态是不正确的,或者你想与MA匹配MN吗?州内完全匹配且仅在州内搜索,最多可节省50倍。@Alolz感谢您的提示。经过一些阅读,我的方式似乎是一个指数增长的复杂性。我同意Name和Zip就足够了,但是,如果同一列中的所有三个属性(Name、state和Zip)都在同一列中,为什么会减少50?出于我的目的,如果州缩写中有错误,我喜欢3。假设每个州都有相同的份额,你可以从250K*250K比较到50(250K/50x250k/50)比较,这是你原来比较次数的1/50。当然,这是最好的情况,如果一个州比其他州有更多的观测值,那么收益就没有那么大。@ALollz同意。谢谢你的澄清。这是一个难题。也许考虑修剪不必要的比较,也就是说,名称和邮编可能不同,但是有没有理由怀疑2字符状态是不正确的,或者你想与MA匹配MN吗?州内完全匹配且仅在州内搜索,最多可节省50倍。@Alolz感谢您的提示。经过一些阅读,我的方式似乎是一个指数增长的复杂性。我同意Name和Zip就足够了,但是,如果同一列中的所有三个属性(Name、state和Zip)都在同一列中,为什么会减少50?出于我的目的,如果州缩写中有错误,我喜欢3。假设每个州都有相同的份额,你可以从250K*250K比较到50(250K/50x250k/50)比较,这是你原来比较次数的1/50。当然,这是最好的情况,如果一个州比其他州有更多的观测值,那么收益就没有那么大。@ALollz同意。谢谢你的澄清。