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

如何基于字符串包含匹配实现两个DataFrame的非等值连接

解决方案

完全可以通过正则模糊匹配完成两个DataFrame的关联,针对你给出的医院名称匹配场景,不需要复杂的实体对齐算法,通过单词边界匹配+长词优先规则就能得到完全符合预期的结果。

核心逻辑

简称都是全称中出现的独立完整单词,通过正则的单词边界符\b避免半截字符误匹配;同时针对一个全称可能命中多个简称的情况(比如Holy Mercy Hospital同时包含Holy和Mercy两个简称),按简称长度从长到短设置匹配优先级,就能匹配到你预期的对应关系。

实现代码

1. 导入依赖、初始化测试数据

import pandas as pd
import re

# 医院全称数据集
full_df = pd.DataFrame({
    'HOSPITAL_NAME_FULL': [
        'St. Christine',
        'Californian Hospital',
        'Holy Mercy Hospital',
        'Germanic NW Hospital',
        'Trauma Center Hospital',
        'Holy Spirit Hospital',
        'Mater Hospital'
    ]
})

# 医院简称数据集
short_df = pd.DataFrame({
    'HOSPITAL_NAME_SHORT': [
        'Christine',
        'Californian',
        'Mercy',
        'Germanic',
        'Trauma',
        'Holy',
        'Mater'
    ]
})

2. 构建正则匹配规则

先把所有简称按长度降序排序(保证长词优先匹配),再拼接成带单词边界的正则表达式,用re.escape转义特殊字符避免正则语法错误:

# 简称按长度从长到短排序
sorted_shorts = sorted(
    short_df['HOSPITAL_NAME_SHORT'].tolist(),
    key=lambda x: len(x),
    reverse=True
)
# 生成正则匹配模式
match_pattern = re.compile(
    r'\b(' + '|'.join(map(re.escape, sorted_shorts)) + r')\b'
)

3. 提取匹配结果完成关联

逐行从全称中提取命中的简称,直接得到关联后的结果集:

full_df['HOSPITAL_NAME_SHORT'] = full_df['HOSPITAL_NAME_FULL'].apply(
    lambda x: match_pattern.search(x).group(1) if match_pattern.search(x) else None
)

运行后输出的结果和你给出的预期完全一致:

HOSPITAL_NAME_FULL HOSPITAL_NAME_SHORT
0             St. Christine           Christine
1      Californian Hospital         Californian
2       Holy Mercy Hospital               Mercy
3      Germanic NW Hospital           Germanic
4    Trauma Center Hospital              Trauma
5      Holy Spirit Hospital                Holy
6            Mater Hospital               Mater

注意事项

  • 不要省略长词排序的步骤:如果不排序直接拼接正则,Holy Mercy Hospital会优先匹配到短词Holy,和预期结果不符
  • 单词边界符\b可以避免误匹配,比如不会把简称Cal错误匹配到全称Californian Hospital中
  • 如果存在全称匹配不到任何简称的情况,代码中会返回None,可以根据业务需求做后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:45:44