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

Pandas中基于字符串包含匹配双DataFrame生成新列

Pandas 按字符串包含关系匹配新增列实现方案

核心逻辑:遍历df1的A列每个值,在df2的B列中查找包含该值的行,提取对应C列值赋值到df1的新列。

完整实现代码

首先导入依赖并构造示例测试数据:

import pandas as pd

# 构造示例df1
df1 = pd.DataFrame({
    'A': ['code', 'other', 'medium'],
    'X': ['...', '...', '...'],
    'Y': ['...', '...', '...'],
    'Z': ['...', '...', '...']
})

# 构造示例df2
df2 = pd.DataFrame({
    'B': ['small/medium', 'large', 'other part', 'code 01'],
    'C': ['ID 20', 'ID 2', 'ID 8', 'ID 9'],
    'P': ['...', '...', '...', '...'],
    'Q': ['...', '...', '...', '...']
})

核心匹配逻辑:

def get_matched_c(a_val):
    # 筛选df2中B列包含当前A列值的行,na=False避免空值报错
    matched = df2[df2['B'].str.contains(a_val, na=False)]
    # 有匹配返回第一个对应C值,无匹配返回空值
    return matched['C'].iloc[0] if not matched.empty else pd.NA

df1['new_col'] = df1['A'].apply(get_matched_c)

执行后得到的df1和预期输出完全一致:

序号Anew_colXYZ
0codeID 9.........
1otherID 8.........
2mediumID 20.........

可选优化说明

  • 若不需要区分大小写匹配,可在str.contains中添加参数case=False
  • 若数据量较大(十万级以上),可以提前将df2的B、C列转为映射字典,避免逐行遍历df2提升效率
  • 若存在多个匹配结果的场景,可按需调整返回规则,比如拼接所有匹配的C值、取最新匹配值等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:24:04