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

如何通过前缀字符串匹配在DF2中生成关联列并合并两个数据集

基于前缀匹配的DataFrame合并解决方案

嘿,这个需求我之前处理过,用Pandas就能轻松搞定!下面给你一步步拆解实现方法:

1. 先准备示例数据集

先把你提到的DF1和DF2用Pandas创建出来,方便后续操作:

import pandas as pd

# 创建DF1
df1 = pd.DataFrame({'ref': ['ABC', 'DEF', 'GHI']})

# 创建DF2
df2 = pd.DataFrame({'word': ['ABC123', 'DEF456', 'GHI789']})

2. 给DF2新增前缀匹配列

这里最高效的方式是用正则表达式提取前缀。我们可以把DF1里的ref值拼接成一个正则模式,精准匹配以这些短单词开头的部分:

# 生成正则匹配模式:匹配以DF1中任意ref开头的字符串
prefix_pattern = '^(' + '|'.join(df1['ref']) + ')'

# 提取前缀到新列,这里命名为'matched_ref'
df2['matched_ref'] = df2['word'].str.extract(prefix_pattern)

执行完这一步,DF2就会变成你期望的样子:

wordmatched_ref
ABC123ABC
DEF456DEF
GHI789GHI

3. 合并两个数据集

现在直接用merge方法,基于DF2的matched_ref和DF1的ref列进行合并:

# 合并数据集,默认是内连接,会匹配所有存在对应关系的行
merged_df = pd.merge(df2, df1, left_on='matched_ref', right_on='ref', how='inner')

合并后的结果会包含DF2的所有列,以及DF1中匹配到的对应行数据(如果DF1有其他列也会一并合并进来)。

补充小提示

  • 如果DF1里的ref存在重叠前缀(比如同时有'AB'和'ABC'),正则会按拼接顺序匹配,建议先把DF1的ref按长度从长到短排序,再生成正则模式,避免短前缀先匹配导致长前缀被忽略。
  • 如果DF2里有不匹配任何前缀的行,str.extract会返回NaN,后续合并时可以选择how='left'保留这些行,或者提前用dropna()过滤掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:02:37