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

如何使用Python3基于CODE列正则匹配合并Pandas DataFrame?

解决方案:基于CODE前缀筛选DataFrame

你可以通过提取CODE的主前缀部分,或者直接使用正则表达式匹配,从df2中筛选出符合df1前缀规则的行,具体实现如下:

方法一:提取主代码前缀筛选

这种方法直观高效,先提取df1中所有CODE的主部分(小数点之前的内容),再筛选df2中主部分匹配的行:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'STR': ['Nonrheumatic aortic valve disorders', 'Glaucoma suspect'],
    'CODE': ['I35', 'H40.0']
})

df2 = pd.DataFrame({
    'STR': ['Nonrheumatic aortic valve disorders', 'Nonrheumatic 1', 'Nonrheumatic 2', 'Nonrheumatic 3',
            'Glaucoma suspect', 'Glaucoma 2', 'Diabetes', 'Diabetes 1', 'Diabetes 1'],
    'CODE': ['I35', 'I35.1', 'I35.2', 'I35.3', 'H40.0', 'H40.1', 'H50', 'H50.1', 'H50.2']
})

# 提取df1中CODE的主部分(小数点前内容)并转为集合
df1_main_codes = set(df1['CODE'].str.split('.').str[0])

# 筛选df2中主部分在df1集合里的行
result = df2[df2['CODE'].str.split('.').str[0].isin(df1_main_codes)]

print(result)

运行后输出结果与你期望的完全一致,该方法性能优异,适合处理大规模数据。

方法二:正则表达式匹配

如果必须使用正则表达式,可以生成匹配主前缀的模式,再筛选符合条件的行:

import pandas as pd
import re

# 示例数据同上

# 生成正则模式:匹配以df1中任意主代码开头的CODE
main_codes = [code.split('.')[0] for code in df1['CODE']]
pattern = rf'^({"|".join(re.escape(c) for c in main_codes)})(\.\d+)?$'

# 筛选df2中CODE符合模式的行
result = df2[df2['CODE'].str.match(pattern)]

print(result)

这个正则模式会匹配两种情况:要么是df1中的主代码本身,要么是主代码后跟随小数点和数字的格式,精准契合你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:50:38