多条件过滤Pandas DataFrame时如何自动跳过None值筛选条件
解决方法
你可以通过动态构造筛选条件的方式实现需求,全程不需要为每个变量单独编写if判断,后续新增筛选字段时也只要修改配置列表即可,扩展性很强。
写法1:循环拼接条件(可读性更高)
import pandas as pd # 统一配置筛选变量和对应DataFrame列名的配对关系 filter_config = [ (country, "country"), (company_type, "company_type"), (sector, "sector"), (state, "state") ] # 初始化默认条件:全选 filter_condition = pd.Series([True] * len(master_df), index=master_df.index) for filter_val, col_name in filter_config: # 仅当筛选变量不为None时,追加对应筛选规则 if filter_val is not None: filter_condition &= master_df[col_name].isin(filter_val) # 应用筛选 search_table = master_df.loc[filter_condition]
写法2:reduce合并(代码更简洁)
import pandas as pd from functools import reduce import operator filter_config = [ (country, "country"), (company_type, "company_type"), (sector, "sector"), (state, "state") ] # 生成所有有效筛选条件的列表 valid_filters = [ master_df[col].isin(val) for val, col in filter_config if val is not None ] # 对所有有效条件做逻辑与合并,无有效条件时默认全选 search_table = master_df.loc[reduce(operator.and_, valid_filters, True)]
两种写法逻辑完全一致:如果所有筛选变量都为None,会返回完整的master_df;如果部分变量为None,会自动跳过对应筛选规则,仅应用已赋值的筛选条件。
内容的提问来源于stack exchange,提问作者pandashugger
相关产品推荐
相关产品推荐

