You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FuzzyWuzzy结合pandas计算城市相似度时所有行得分相同问题

问题原因

  • fuzz.token_set_ratio 方法仅支持接收两个字符串作为输入计算相似度,本身不兼容pandas Series的向量化运算规则。
  • 你将整列test_df["City"]直接传入方法时,程序会把整列对象强制转换为一个完整字符串和目标城市名做单次比对,最终将单次计算得到的结果广播到了整个Score列,所以所有行得分完全相同。

解决方法

使用pandas的apply方法逐行处理City列的每个值,单独调用相似度计算方法即可,修改后的代码如下:

from fuzzywuzzy import fuzz
import pandas as pd

test_df= pd.DataFrame( {"City" : ["Amsterdam","Amsterdam","Rotterdam","Zurich","Vienna","Prague"]})
# 逐行计算每个城市名的匹配得分
test_df["Score"] = test_df["City"].apply(lambda x: fuzz.token_set_ratio("amsterdam", x))

print(test_df)

运行后输出的结果和单独测试的结果一致:

City  Score
0  Amsterdam    100
1  Amsterdam    100
2  Rotterdam     67
3     Zurich     13
4     Vienna     13
5     Prague      0

如果处理的数据量较大,可以使用numpy的向量化包装提升运行效率:

import numpy as np
vec_fuzz = np.vectorize(lambda x: fuzz.token_set_ratio("amsterdam", x))
test_df["Score"] = vec_fuzz(test_df["City"])

内容的提问来源于stack exchange,提问作者Dániel Molnár

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:06:03