Pandas筛选多列仅含同一方向或空值的可扩展实现方法
解决方案
完全不需要硬编码每个列的判断逻辑,以下两种方案都支持任意数量dir列自动适配,扩展性极强:
方案1:向量化高性能实现(推荐,适合大数据量)
核心逻辑:只要某行不同时出现up和down两个值,就符合筛选要求
# 1. 自动匹配所有dir开头+数字结尾的列,后续新增dir4/dir5无需修改代码 dir_cols = df1.filter(regex=r'^dir\d+$').columns # 若dir列命名不统一,也可手动指定列列表:dir_cols = ['dir0','dir1','dir2','dir3'] # 2. 判断每行是否存在up、是否存在down has_up = (df1[dir_cols] == 'up').any(axis=1) has_down = (df1[dir_cols] == 'down').any(axis=1) # 3. 保留不同时存在up和down的行 df_out = df1[~(has_up & has_down)]
方案2:直观逻辑实现(适合小数据量,逻辑易读)
核心逻辑:每行非空的方向值唯一值数量不超过1,就符合要求
dir_cols = df1.filter(regex=r'^dir\d+$').columns mask = df1[dir_cols].apply(lambda row: row.dropna().nunique() <= 1, axis=1) df_out = df1[mask]
两种方案运行结果都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Vineet
相关产品推荐
相关产品推荐

