如何基于两个列表判断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
相关产品推荐
相关产品推荐

