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

如何修正Pandas代码,筛选包含"FAIL"的DataFrame列与行?

问题:保留Pandas DataFrame中包含"FAIL"的行和列

输入数据

Values1Values2Values3Status1Status2Status3
111PASSPASSFAIL
222PASSPASSPASS
333PASSPASSPASS
444PASSFAILPASS

预期输出

Status2Status3
PASSFAIL
FAILPASS

当前输出

Status1Status2Status3
PASSPASSFAIL
PASSFAILPASS

原代码

import pandas as pd
values = range(1,5)
status_pass = ["PASS"]*len(values)
status1 = status_pass[1:]+["FAIL"]
status2 = status1[::-1]
df = pd.DataFrame({"Values1":values,"Values2":values,"Values3":values,"Status1":status_pass,"Status2":status1,"Status3":status2})
# drop unwanted rows
words_to_keep = ["FAIL"]
df = df[df.stack().groupby(level=0).apply(
    lambda x: all(x.str.contains(w, case=False).any() for w in words_to_keep))]
# Filter by column name
df = df.filter(like='Status', axis=1)

修正方案

原代码的问题在于列筛选仅保留了名称含"Status"的列,但没有过滤掉那些不包含"FAIL"值的Status列(比如Status1全为PASS)。下面是修正后的代码:

import pandas as pd
values = range(1,5)
status_pass = ["PASS"]*len(values)
status1 = status_pass[1:]+["FAIL"]
status2 = status1[::-1]
df = pd.DataFrame({"Values1":values,"Values2":values,"Values3":values,"Status1":status_pass,"Status2":status1,"Status3":status2})

# 筛选包含"FAIL"的行:每行至少有一个"FAIL"
rows_with_fail = df.isin(["FAIL"]).any(axis=1)
df = df[rows_with_fail]

# 筛选包含"FAIL"的列:每列至少有一个"FAIL"
cols_with_fail = df.isin(["FAIL"]).any(axis=0)
df = df.loc[:, cols_with_fail]

关键步骤说明

  • 行筛选:df.isin(["FAIL"]).any(axis=1) 生成布尔序列,标记每行是否存在"FAIL"值,据此保留符合条件的行。
  • 列筛选:df.isin(["FAIL"]).any(axis=0) 生成布尔序列标记每列是否存在"FAIL"值,仅保留这些列。

内容的提问来源于stack exchange,提问作者Gооd_Mаn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:50:14