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

使用Fuzzywuzzy实现两个DataFrame地址模糊匹配并拷贝唯一键

基于地址模糊匹配的两个DataFrame关联方案

错误原因

你之前的合并逻辑错误核心是混淆了匹配结果的索引归属:process.extractOne返回的第三个元素是df1中匹配行的索引,你把这个值设为df1的索引后按行索引和df2合并,本质是把df1的行顺序打乱成和df2匹配结果的索引一致再直接按行对齐,完全不符合关联逻辑,才会出现匹配错位的问题。

正确实现代码

import pandas as pd
from fuzzywuzzy import process

THRESHOLD = 90

# 原有匹配逻辑保持不变
best_match = df2['address_df2'].apply(
    lambda x: process.extractOne(x, df1['address_df1'], score_cutoff=THRESHOLD)
)

# 拆分匹配结果为独立列追加到df2
match_result = best_match.apply(pd.Series)
match_result.columns = ['matched_df1_address', 'fuzzy_match_%', 'df1_matched_index']
df2 = pd.concat([df2, match_result], axis=1)

# 用匹配到的df1索引提取唯一键,空匹配场景做兼容
df2['unique key(from df1)'] = df2['df1_matched_index'].apply(
    lambda idx: df1.loc[idx, 'unique key'] if pd.notna(idx) else None
)

# 整理为要求的输出格式
df3 = df2[['cost center', 'country', 'address_df2', 'unique key(from df1)', 'fuzzy_match_%']].copy()
# 相似度转为带%的字符串格式
df3['fuzzy_match_%'] = df3['fuzzy_match_%'].astype(str) + '%'

扩展说明

如果需要关联df1的更多字段(比如call #、Name等),可以直接用join方法批量关联,不需要逐个字段提取:

df3 = df2.join(
    df1.drop(columns=['address_df1']), # 避免地址列重复
    on='df1_matched_index'
)

内容的提问来源于stack exchange,提问作者aero8991

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:00