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

如何在Pandas DataFrame中实现多优先级子串匹配打标签?

Pandas DataFrame按子串规则打标签的解决方案

针对你遇到的大小写不敏感匹配和重复赋值覆盖结果的问题,可以通过以下两种方式实现与SQL CASE WHEN逻辑完全一致的标签标记:

方法一:按优先级逐步更新标签

先将所有行的标签初始化为默认值Other,再按匹配优先级依次更新符合条件的行,避免覆盖已匹配的结果:

import pandas as pd

# 示例DataFrame
data = {
    'Skill': [
        'Junior AI, Google & MS Cloud Platform',
        'Senior AI, Google & MS Cloud Platform',
        'Project Management',
        'Any Programme Management',
        'Financial Management',
        'Engineer',
        'Full Stack Engineer'
    ]
}
df = pd.DataFrame(data)

# 1. 初始化标签为默认值
df["Skill Type"] = "Other"

# 2. 按优先级匹配并更新标签(case=False实现大小写不敏感)
# 匹配包含AI且后续有Cloud的内容
mask_ai_cloud = df['Skill'].str.contains(r'AI.*Cloud', regex=True, case=False)
df.loc[mask_ai_cloud, "Skill Type"] = "Data Member"

# 匹配包含PRO且后续有MANAGE的内容(覆盖Project/Programme场景)
mask_pro_manage = df['Skill'].str.contains(r'PRO.*MANAGE', regex=True, case=False)
df.loc[mask_pro_manage, "Skill Type"] = "Project Manager"

# 匹配包含FINANC的内容
mask_financ = df['Skill'].str.contains(r'FINANC', regex=True, case=False)
df.loc[mask_financ, "Skill Type"] = "Finance Member"

方法二:使用numpy.select实现简洁的多条件判断

利用numpy.select可以将多个条件与对应标签一一对应,逻辑与SQL CASE WHEN完全对齐,代码更紧凑:

import pandas as pd
import numpy as np

# 示例DataFrame
data = {
    'Skill': [
        'Junior AI, Google & MS Cloud Platform',
        'Senior AI, Google & MS Cloud Platform',
        'Project Management',
        'Any Programme Management',
        'Financial Management',
        'Engineer',
        'Full Stack Engineer'
    ]
}
df = pd.DataFrame(data)

# 定义匹配条件(按优先级排序)
conditions = [
    df['Skill'].str.contains(r'AI.*Cloud', regex=True, case=False),
    df['Skill'].str.contains(r'PRO.*MANAGE', regex=True, case=False),
    df['Skill'].str.contains(r'FINANC', regex=True, case=False)
]

# 对应条件的标签
choices = [
    'Data Member',
    'Project Manager',
    'Finance Member'
]

# 生成标签列,未匹配任何条件则用默认值Other
df['Skill Type'] = np.select(conditions, choices, default='Other')

关键优化点说明

  1. 大小写不敏感处理:通过str.contains的case=False参数实现,无需手动转换字符串大小写,简化代码。
  2. 避免结果覆盖:两种方法均按优先级判断匹配,只有未被更高优先级条件匹配的行,才会被后续条件或默认值覆盖,完全复现SQL CASE WHEN的顺序匹配逻辑。

最终输出结果

执行上述代码后,DataFrame的Skill Type列结果如下:

SkillSkill Type
Junior AI, Google & MS Cloud PlatformData Member
Senior AI, Google & MS Cloud PlatformData Member
Project ManagementProject Manager
Any Programme ManagementProject Manager
Financial ManagementFinance Member
EngineerOther
Full Stack EngineerOther

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:06:27