如何根据动态增减关键词自动过滤Pandas DataFrame
Pandas 动态关键词过滤实现方案
核心逻辑是将关键词统一存储为可动态修改的列表,通过批量生成匹配条件、聚合布尔掩码的方式实现自动适配,无需手动增减&连接的判断语句。
第一步:统一管理关键词
将所有基础关键词、特征关键词存储为列表,后续增删关键词只需要修改对应列表内容,不需要改动过滤逻辑代码:
# 基础关键词:命中结果需要同时包含列表内所有关键词,增删直接修改列表 base_keywords = ['tarifa'] # 特征关键词:用于细分过滤的特征词集合,增删直接修改列表 feature_keywords = ['mensual', 'anual']
第二步:封装通用过滤函数
封装可复用的关键词过滤函数,自动适配传入的关键词列表长度,自动处理字段空值避免报错:
import numpy as np def kw_filter(df, target_col, must_contain_list): # 逐个生成每个关键词的匹配布尔序列 match_masks = [ df[target_col].str.contains( kw, na=False, # 空值直接判定为不匹配 case=False, # 可选:不区分大小写,不需要可删除 regex=False # 可选:把关键词当普通字符串匹配,避免特殊字符触发正则逻辑,不需要可删除 ) for kw in must_contain_list ] # 对所有匹配条件取逻辑与:必须同时包含列表内所有关键词 final_mask = np.logical_and.reduce(match_masks) return df[final_mask]
第三步:调用方式
单组条件过滤
直接拼接基础关键词和需要的特征关键词传入函数即可,比如匹配同时包含tarifa和mensual的行:
kw_s = kw_filter( df=kw_df, target_col='transaction_description', must_contain_list=base_keywords + ['mensual'] )
批量生成所有特征词对应的过滤结果
如果需要遍历所有特征词、分别生成「基础词+单个特征词」的过滤结果,直接循环特征词列表即可,后续新增/删除特征词不需要修改循环代码:
# 用字典存储所有过滤结果,key为特征词,value为过滤后的DataFrame all_filter_result = {} for f_kw in feature_keywords: all_kws = base_keywords + [f_kw] all_filter_result[f_kw] = kw_filter(kw_df, 'transaction_description', all_kws) # 调用示例:取匹配anual的结果 kw_s_anual = all_filter_result['anual']
扩展说明
- 如果需要「包含任意一个关键词即可命中」的逻辑,只需要把函数里的
np.logical_and.reduce替换为np.logical_or.reduce - 如果需要多层级关键词组合(比如基础词+二级特征词+三级特征词),只需要按规则拼接关键词列表传入函数即可,不需要修改核心过滤逻辑
内容的提问来源于stack exchange,提问作者feruciform
相关产品推荐
相关产品推荐

