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

如何优雅筛选pandas DataFrame:排除S-xx列含指定值的行

优雅筛选pandas DataFrame中无指定值的行

直接用pandas的批量列匹配和行级全量判断就能搞定,不用逐列写条件,代码简洁高效:

import pandas as pd

# 注意:原示例里的A、N要改成字符串,否则会报未定义错误
data = {"Subject": ["101", "102", "201", "202"],
        "S-1": ["A", "N", "N", "B"],
        "S-2": ["B", "A", "N", "B"],
        "S-3": ["A", "C", "B", "N"],
        "S-20": ["C", "A", "N", "N"]}

df = pd.DataFrame(data).set_index("Subject")

# 核心筛选代码
filtered_df = df[df.filter(regex='^S-\d+$').ne("N").all(axis=1)]
print(filtered_df)

代码解释:

  • df.filter(regex='^S-\d+$'):用正则表达式精准匹配所有列名以"S-"开头、后面跟数字的列,自动选中你的20个"S-1"到"S-20"列,不用手动列出来。
  • .ne("N"):生成一个布尔DataFrame,每个单元格标记是否不等于"N"(等价于!= "N",写法更简洁)。
  • .all(axis=1):按行进行判断,只有当该行所有目标列都满足"不等于N"时,返回True。
  • 最后用这个布尔序列作为索引,从原DataFrame中筛选出符合条件的行。

运行后得到的结果:

S-1 S-2 S-3 S-20
Subject                  
101       A   B   A    C

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:29:51