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

如何基于两个列表判断DataFrame字符串含多词并赋值新列

DataFrame产品名称清洗:基于双关键词规则标记类别

需求说明

现有带product列的DataFrame,产品名称格式混乱,需按以下规则生成product_clean列:

  • 先判断单元格是否包含fruit的任意大小写变体(原list1内容)
  • 若满足,再判断是否包含具体水果名称(banana/strawberry/cherry,即原list2内容)
  • 两者均满足则赋值'Fruit',否则保留NaN

解决方案

用Pandas向量化字符串操作实现,高效简洁:

步骤1:准备数据

import pandas as pd
import numpy as np

# 优化关键词列表:用忽略大小写替代罗列所有大小写变体
category_key = ['fruit']
specific_fruits = ['banana', 'strawberry', 'cherry']

# 构造示例DataFrame
df = pd.DataFrame({
    'product': [
        'fruit 10% banana SPECIAL',
        'FRUit strawberry 99OFF',
        'milk',
        'jam',
        'cherry FRUIT Virginia'
    ],
    'product_clean': [np.nan]*5
})

步骤2:实现匹配逻辑

# 检查是否包含类别关键词(忽略大小写)
has_category = df['product'].str.contains('|'.join(category_key), case=False, regex=True)
# 检查是否包含具体水果关键词
has_specific_fruit = df['product'].str.contains('|'.join(specific_fruits), case=False, regex=True)

# 批量赋值:同时满足两个条件时设为'Fruit',否则保留NaN
df['product_clean'] = np.where(has_category & has_specific_fruit, 'Fruit', np.nan)

步骤3:验证结果

运行后得到目标格式的DataFrame:

product product_clean
0  fruit 10% banana SPECIAL          Fruit
1    FRUit strawberry 99OFF          Fruit
2                       milk           NaN
3                        jam           NaN
4       cherry FRUIT Virginia          Fruit

关键优化点

  • 用case=False替代手动罗列所有大小写变体,简化关键词维护,避免遗漏
  • 向量化的str.contains比循环apply效率高得多,适合处理大规模数据集
  • np.where实现批量条件赋值,逻辑清晰易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:15:44