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

如何判断Pandas列字符串是否含字典值并生成对应键的新列

解决方案

我们可以通过构建反向映射+匹配的方式,快速实现给Pandas数据框新增匹配类别的需求,以下是具体实现步骤:


1. 准备基础数据

先定义原始字典和数据框:

import pandas as pd

# 定义车型类别与具体车型的映射字典
vehicle_dict = {'Car': ['Merc', 'BMW', 'Ford', 'Suzuki'], 'MotorCycle': ['Harley', 'Yamaha', 'Triump']}

# 创建原始数据框
df = pd.DataFrame({
    'Person': ['A', 'B'],
    'Sentence': ['He drives a Merc', 'He rides a Harley']
})

2. 方法一:正则匹配(高效适合大数据量)

先构建反向映射字典,把每个具体车型关联到对应的类别,再用正则快速提取匹配项:

# 构建反向映射:具体车型 → 类别
reverse_map = {model: category for category, models in vehicle_dict.items() for model in models}

# 拼接正则匹配模式,匹配任意一个车型
pattern = '|'.join(reverse_map.keys())

# 提取Sentence中的车型,并映射到对应类别
df['Vehicle'] = df['Sentence'].str.extract(f'({pattern})', expand=False).map(reverse_map)

执行后得到的结果:

PersonSentenceVehicle
AHe drives a MercCar
BHe rides a HarleyMotorCycle

3. 方法二:逐行遍历(逻辑直观)

如果需要更直白的逻辑判断,可以用apply逐行检查Sentence是否包含某类别的车型:

def match_vehicle(sentence):
    for category, models in vehicle_dict.items():
        if any(model in sentence for model in models):
            return category
    return None  # 无匹配时返回空值

df['Vehicle'] = df['Sentence'].apply(match_vehicle)

注意事项

  • 若Sentence中存在多个匹配车型(比如同时出现Merc和Harley),两种方法都会返回第一个匹配到的类别,可根据需求调整匹配优先级。
  • 如需不区分大小写的匹配,可在正则中添加flags=re.IGNORECASE,或在逐行判断时将字符串统一转为小写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:42:22