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

如何用Python/Pandas字典推导式结合str.contains实现课程名部分匹配映射

实现支持部分匹配的课程类别映射

没问题,这就教你怎么搞定这个支持部分字符串匹配的课程分类需求!针对你的场景,我给你两种实用的方案,都能完美适配你那35个键值对的映射字典:

方案一:循环遍历映射(直观易懂)

这种方法逻辑直白,适合新手理解,而且35个键的规模完全不会有性能问题:

import pandas as pd

# 你的原始数据和映射字典
df = pd.DataFrame({'course_name' : ['Phsyics, Maths','Algebra & Maths','History','Geology','Biology']})
mapping = {'Algebra & Maths' : 'Mathematics', 'Phsyics' : 'Science', 'History' : 'History', 'Geology' : 'Geology', 'Biology' : 'Science'}

# 先初始化类别列,给未匹配的课程留个默认值
df['category'] = 'Other'

# 遍历映射字典的每个键值对,做部分匹配赋值
for course_pattern, target_category in mapping.items():
    # 生成匹配掩码:检查课程名是否包含当前模式
    # case=False 忽略大小写,na=False 把NaN值归为不匹配
    match_mask = df['course_name'].str.contains(course_pattern, case=False, na=False)
    # 给匹配到的行赋值对应类别
    df.loc[match_mask, 'category'] = target_category

# 查看结果
print(df)

运行后你会得到这样的结果:

course_name      category
0    Phsyics, Maths        Science
1  Algebra & Maths    Mathematics
2           History        History
3            Geology        Geology
4            Biology        Science

方案二:字典推导式 + np.select(更简洁)

如果你想用字典推导式来实现,结合numpy.select可以一次性完成所有匹配,代码更紧凑:

import pandas as pd
import numpy as np

df = pd.DataFrame({'course_name' : ['Phsyics, Maths','Algebra & Maths','History','Geology','Biology']})
mapping = {'Algebra & Maths' : 'Mathematics', 'Phsyics' : 'Science', 'History' : 'History', 'Geology' : 'Geology', 'Biology' : 'Science'}

# 用字典推导式生成所有匹配条件的列表
match_conditions = [
    df['course_name'].str.contains(pattern, case=False, na=False) 
    for pattern in mapping.keys()
]
# 提取映射字典里的类别值列表
category_values = list(mapping.values())

# 使用np.select完成赋值,default是未匹配课程的默认类别
df['category'] = np.select(match_conditions, category_values, default='Other')

print(df)

关键注意事项

  • 匹配优先级:不管用哪种方法,映射字典的键顺序很重要!如果一个课程能匹配多个键(比如假设你后来加了'Maths'的映射),排在前面的键会先被匹配。所以记得把更具体的匹配(比如完全匹配的课程名)放在字典的前面,避免被宽泛的模式提前匹配。
  • 大小写控制:如果需要严格区分大小写,去掉str.contains里的case=False参数就行。
  • NaN处理:na=False确保如果课程名是NaN的话,会被归为默认的'Other',你可以根据需求调整这个参数。

内容的提问来源于stack exchange,提问作者Umar.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:51:14