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

如何使用Python Pandas匹配多DataFrame的ID并为主DataFrame添加分类列

解决思路与代码实现

步骤说明

  1. 先将两类ID转为集合,利用集合的快速查找特性提升匹配效率;
  2. 编写自定义函数处理每个ID单元格:
    • 按分号分割ID并去除多余空格;
    • 优先判断是否存在第一类ID,存在则标记「第一类型」;
    • 若没有第一类ID,检查所有ID是否都属于第二类,是则标记「第二类型」;
    • 其余情况返回NaN;
  3. 用apply将函数批量应用到ID列,生成新分类列。

代码示例

import pandas as pd
import numpy as np

# 构造示例数据(可替换为你的Excel导入数据)
main_df = pd.DataFrame({
    'ID': ['1234; 5678', '5678', '9def', '1234; 9abc', '123; 456'],
    '其他列': ['a', 'b', 'c', 'd', 'e']
})

type1_df = pd.DataFrame({'ID': ['1234', '9def']})
type2_df = pd.DataFrame({'ID': ['5678', '9abc']})

# 将两类ID转为集合,优化查找速度
type1_set = set(type1_df['ID'])
type2_set = set(type2_df['ID'])

# 自定义分类函数
def classify_ids(id_str):
    # 分割并清洗ID列表
    ids = [id.strip() for id in id_str.split(';')]
    # 检查是否包含第一类ID
    has_type1 = any(id in type1_set for id in ids)
    if has_type1:
        return '第一类型'
    # 检查是否全部为第二类ID
    all_type2 = all(id in type2_set for id in ids)
    if all_type2:
        return '第二类型'
    # 不符合上述情况返回空值
    return np.nan

# 生成新分类列
main_df['分类'] = main_df['ID'].apply(classify_ids)

print(main_df)

输出结果

ID 其他列    分类
0  1234; 5678    a  第一类型
1        5678    b  第二类型
2        9def    c  第一类型
3  1234; 9abc    d  第一类型
4    123; 456    e   NaN

补充说明

  • 用集合替代isin或contains方法,能大幅提升多ID场景下的匹配效率;
  • 函数逻辑严格遵循优先级:先判断第一类ID,再判断第二类全匹配,完全符合需求规则;
  • 如果ID存在大小写、特殊字符等格式问题,可以在分割后增加清洗步骤(比如统一转大写、去除特殊符号)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:49:52