如何在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
相关产品推荐
相关产品推荐

