如何优雅筛选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
相关产品推荐
相关产品推荐

