如何通过前缀字符串匹配在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就会变成你期望的样子:
| word | matched_ref |
|---|---|
| ABC123 | ABC |
| DEF456 | DEF |
| GHI789 | GHI |
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
相关产品推荐
相关产品推荐

