首页 > 解决方案 > 使用 pandas 多对多应用函数

问题描述

我正在使用该模块pandas基于字符串匹配进行一些条件过滤。fuzzywuzzy我编写了一些有效的代码,但是速度非常慢,并且违背了我身体的每一个本能,因为我在 pandas 系列上使用了 for 循环。

我的问题是我想将字符串数组与另一个数组进行比较,如果一个数组中的字符串与另一个数组中的任何字符串足够相似,我想将它从数组中完全删除。我目前的代码是这样的:

from fuzzywuzzy import fuzz
import pandas as pd
for value in new_contacts['StringMatch']: # this is a pandas column in a dataframe
    previous_contacts['ratio'] = previous_contacts['StringMatch'].apply(lambda x: fuzz.ratio(x, value))
    previous_contacts = previous_contacts[previous_contacts['ratio'] > 97] # fuzz.ratio outputs an int between 0 and 100
    previous_contacts.drop('ratio', axis=1, inplace=True)

有没有人有任何建议/最佳实践来使这段代码更快?

标签: pythonpandas

解决方案


可能有一种更快的方法来完成您的要求。如果可能的话,我会请你重新评估你对fuzzywuzzy 包的需求。编辑距离计算非常昂贵,因为它为数组中的每对字符串构造一个大小矩阵n * mn并且是两个字符串的大小)。m


推荐阅读