gpt4 book ai didi

python - 在数据框列中应用模糊匹配并将结果保存在新列中

转载 作者:太空狗 更新时间:2023-10-29 18:27:30 24 4
gpt4 key购买 nike

我有两个数据框,每个数据框都有不同的行数。下面是每个数据集的几行

df1 =
Company City State ZIP
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102
LACKEY SHEET METAL St. Louis MO 63102

df2 = 
FDA Company FDA City FDA State FDA ZIP
LACKEY SHEET METAL St. Louis MO 63102
PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
HELGET GAS PRODUCTS INC Omaha NE 68127
ORTHOQUEST LLC La Vista NE 68128

我使用 combined_data = pandas.concat([df1, df2], axis = 1) 并排加入了他们.我的下一个目标是比较 df1['Company'] 下的每个字符串df2['FDA Company'] 下的每个字符串使用来自 fuzzy wuzzy 的几个不同的匹配命令模块并返回最佳匹配的值及其名称。我想将其存储在新列中。例如,如果我做了 fuzz.ratiofuzz.token_sort_ratioLACKY SHEET METALdf1['Company']df2['FDA Company']它会返回最佳匹配是 LACKY SHEET METAL得分为 100然后这将保存在 combined data 中的新列下.结果看起来像

combined_data =
Company City State ZIP FDA Company FDA City FDA State FDA ZIP fuzzy.token_sort_ratio match fuzzy.ratio match
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101 LACKEY SHEET METAL St. Louis MO 63102 LACKEY SHEET METAL 100 LACKEY SHEET METAL 100
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102 PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102 HELGET GAS PRODUCTS INC Omaha NE 68127
LACKEY SHEET METAL St. Louis MO 63102 ORTHOQUEST LLC La Vista NE 68128

我试过

combined_data['name_ratio'] = combined_data.apply(lambda x: fuzz.ratio(x['Company'], x['FDA Company']), axis = 1) 

但是由于列的长度不同而出现错误。

我被难住了。我如何才能做到这一点?

最佳答案

我不知道你在做什么。这就是我的做法。

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

创建一系列元组进行比较:

compare = pd.MultiIndex.from_product([df1['Company'],
df2['FDA Company']]).to_series()

创建一个特殊函数来计算模糊指标并返回一个序列。

def metrics(tup):
return pd.Series([fuzz.ratio(*tup),
fuzz.token_sort_ratio(*tup)],
['ratio', 'token'])

指标应用于比较系列

compare.apply(metrics)

enter image description here

有很多方法可以完成下一部分:

获取与 df1 的每一行最接近的匹配项

compare.apply(metrics).unstack().idxmax().unstack(0)

enter image description here

获取与 df2 的每一行最接近的匹配项

compare.apply(metrics).unstack(0).idxmax().unstack(0)

enter image description here

关于python - 在数据框列中应用模糊匹配并将结果保存在新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com