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

Pandas如何根据字典匹配DataFrame多值列提取对应分类

问题背景
  • 目标DataFrame为df1,包含ID、item两列:
    • item列的多个物品名以¥符号分隔,示例取值:chair、desk¥blue chair、bed¥pen¥cable
  • 物品分类映射字典item_dict从CSV读取,存储物品名到分类的对应关系,示例映射:chair对应furniture、mug对应tableware
  • 需求:在df1中新增category列,逐行提取当前行item里所有能匹配到字典的物品对应的分类,多个分类用逗号分隔,无匹配项则留空
  • 已尝试方案的缺陷:
    • 执行df1['category'] = df1['item'].replace(item_dict)仅能正确处理仅含单个物品的行
    • 增加regex=True参数后可处理多物品行,但会出现子串误匹配问题,比如将desk¥blue chair错误替换为desk¥blue furniture,无法实现“仅保留匹配分类、剔除未匹配物品名”的预期效果
实现代码

不要直接用整列正则替换,先按分隔符拆分每行的物品为独立元素,再逐个做精确字典匹配,最后拼接分类结果即可,完全避免子串匹配错误:

def get_matched_categories(item_str, category_map):
    # 按¥拆分得到单个物品列表,自动去除首尾空格避免格式干扰
    items = [i.strip() for i in item_str.split('¥')]
    # 遍历物品,收集所有存在映射的分类
    matched = [category_map[item] for item in items if item in category_map]
    # 用逗号拼接分类,无匹配时返回空字符串
    return ','.join(matched)

# 逐行应用函数生成category列
df1['category'] = df1['item'].apply(lambda x: get_matched_categories(x, item_dict))
补充说明
  • 先按¥拆分字符串的逻辑,保证每个匹配单元是完整的物品名,从根源上避免短词子串误匹配的问题
  • 字典精确匹配仅返回命中的分类,自动过滤未匹配到的物品,完全符合输出要求
  • 若需要对重复分类去重且不要求保留原有顺序,可将匹配逻辑改为list(set([category_map[item] for item in items if item in category_map]));需要保序去重可以追加遍历判重的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:42:16