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

如何基于多列进行模糊匹配合并两个爬取所得的DataFrame门店数据集

多列模糊匹配合并门店数据集实现方案

前置依赖

使用pandas库处理DataFrame,先导入依赖:

import pandas as pd

实现步骤

1. 标准化匹配字段消除格式差异

门店名称存在大小写不一致(如示例中的KFC和Kfc)、编码可能带多余空格等问题,首先对两个表的匹配列做标准化处理,为模糊匹配打基础:

# 假设第一个数据集为df1,第二个为df2
# 给df1添加标准化辅助列
df1['std_code'] = df1['store code'].str.strip()
df1['std_name'] = df1['name'].str.strip().str.upper()

# 统一df2的字段名和df1对齐,同时添加标准化辅助列
df2 = df2.rename(columns={
    'store code2': 'store code',
    'name2': 'name',
    'phone2': 'phone',
    'email2': 'email',
    'website2': 'website'
})
df2['std_code'] = df2['store code'].str.strip()
df2['std_name'] = df2['name'].str.strip().str.upper()

如果实际场景中门店名称还包含特殊符号、括号等冗余内容,可以在标准化步骤中增加正则替换逻辑,进一步提升匹配准确率。

2. 双列外连接匹配

以标准化后的门店编码、门店名称为匹配键,做外连接保留两个表的所有行:

merged_df = pd.merge(
    df1, df2,
    on=['std_code', 'std_name'],
    how='outer',
    suffixes=('_df1', '_df2')
)

3. 合并同名字段值

根据业务需求选择字段取值优先级,示例可选优先级逻辑如下:

# 定义需要保留的业务字段
cols = ['store code', 'name', 'phone', 'email', 'website']
for col in cols:
    # 方案1:优先取第一个表的非空值,空值用第二个表的内容填充
    merged_df[col] = merged_df[f'{col}_df1'].fillna(merged_df[f'{col}_df2'])
    # 方案2:优先取第二个表的非空值(如果第二个网站数据更新,推荐用这个方案)
    # merged_df[col] = merged_df[f'{col}_df2'].fillna(merged_df[f'{col}_df1'])
    # 方案3:不同字段单独设置优先级,比如基础信息取第一个表,联系方式取第二个表
    # if col in ['phone', 'email']:
    #     merged_df[col] = merged_df[f'{col}_df2'].fillna(merged_df[f'{col}_df1'])
    # else:
    #     merged_df[col] = merged_df[f'{col}_df1'].fillna(merged_df[f'{col}_df2'])

4. 清理得到最终结果

删除辅助字段、去重排序即可得到目标数据集:

final_df = merged_df[cols].drop_duplicates().sort_values('store code').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:51:00