如何在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')
关键优化点说明
- 大小写不敏感处理:通过
str.contains的case=False参数实现,无需手动转换字符串大小写,简化代码。 - 避免结果覆盖:两种方法均按优先级判断匹配,只有未被更高优先级条件匹配的行,才会被后续条件或默认值覆盖,完全复现SQL
CASE WHEN的顺序匹配逻辑。
最终输出结果
执行上述代码后,DataFrame的Skill Type列结果如下:
| Skill | Skill Type |
|---|---|
| Junior AI, Google & MS Cloud Platform | Data Member |
| Senior AI, Google & MS Cloud Platform | Data Member |
| Project Management | Project Manager |
| Any Programme Management | Project Manager |
| Financial Management | Finance Member |
| Engineer | Other |
| Full Stack Engineer | Other |
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

