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

如何在Pandas中用正则匹配字符串数组,实现跨表带后缀内容匹配?

解决两个DataFrame的字符串标识匹配问题

我来帮你搞定这个匹配需求!核心思路是先从两个表的字符串里提取出不带后缀的核心标识,再基于这个标识做精准匹配,具体步骤和代码如下:

步骤1:提取df1中Col_A的核心标识

df1的Col_A里包含类似[B00-OUI_001]的标识,我们可以用正则表达式把括号里的内容提取出来,作为匹配的基准:

df1['core_id'] = df1['Col_A'].str.extract(r'\[([^\]]+)\]', expand=False)

这里的正则r'\[([^\]]+)\]'会匹配一对方括号,并且捕获括号内的所有非括号字符,正好取出我们需要的B00-OUI_001这类标识。

步骤2:处理df2中Col_B的标识(去掉_V后缀)

df2的Col_B是[B00-OUI_001_V]这种格式,我们先提取括号内的内容,再去掉末尾的_V后缀:

# 先提取括号内的完整字符串,再从右侧分割一次_V取前面的部分
df2['core_id'] = df2['Col_B'].str.extract(r'\[([^\]]+)\]', expand=False).str.rsplit('_V', 1).str[0]

用rsplit('_V', 1)而不是普通的split,是为了避免标识本身包含下划线时误分割,确保只去掉最后一个_V后缀。

步骤3:筛选匹配的条目

现在两个DataFrame都有了统一的core_id列,直接用isin就能筛选出df2中与df1匹配的条目:

matched_entries = df2[df2['core_id'].isin(df1['core_id'])]

完整示例代码

import pandas as pd

# 模拟你的数据
df1 = pd.DataFrame({
    'Col_A': ['Name Address [B00-OUI_001] Something else etc.',
              'Another record [B00-OUI_005] Random text']
})

df2 = pd.DataFrame({
    'Col_B': ['[B00-OUI_000_V]', '[B00-OUI_001_V]', '[B00-OUI_003_V]', '[B00-OUI_005_V]']
})

# 提取df1的核心标识
df1['core_id'] = df1['Col_A'].str.extract(r'\[([^\]]+)\]', expand=False)

# 处理df2的标识
df2['core_id'] = df2['Col_B'].str.extract(r'\[([^\]]+)\]', expand=False).str.rsplit('_V', 1).str[0]

# 筛选匹配结果
matched_df = df2[df2['core_id'].isin(df1['core_id'])]

print(matched_df)

运行后会输出df2中[B00-OUI_001_V]和[B00-OUI_005_V]这两个匹配条目。

如果你的数据里存在Col_A包含多个方括号的情况,或者标识格式有特殊变化,可以随时调整正则逻辑适配~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:23