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

基于条件删除布尔值行:删除仅NIT/FIB为True的DataFrame行

解决DataFrame删除特定行的问题

没问题,我来帮你搞定这两个删除需求。咱们用pandas来处理,思路很清晰——通过筛选保留符合要求的行(也就是排除掉你要删除的行),这种方式比直接drop更直观,也不容易出错。

先明确前提:从你的示例来看,number是数值列,剩下的ISM、AAAL、GSOG、GSI、AN、NIT、FIB都是布尔型列(值为True/False)。我们的目标是删除两类行:

1. 删除所有NIT为True且其余布尔列均为False的行

先定义所有布尔列的列表,然后构建筛选条件,保留不满足删除条件的行:

import pandas as pd

# 假设你的DataFrame已经是df了
bool_cols = ['ISM', 'AAAL', 'GSOG', 'GSI', 'AN', 'NIT', 'FIB']

# 筛选并保留:排除「NIT为True + 其他所有布尔列全为False」的行
df = df[~((df['NIT'] == True) & ((df[bool_cols].drop('NIT', axis=1) == False).all(axis=1)))]

代码解释:

  • ~ 是取反操作,因为我们要保留不满足删除条件的行
  • df['NIT'] == True 定位到NIT为True的行
  • (df[bool_cols].drop('NIT', axis=1) == False).all(axis=1) 检查除NIT外的所有布尔列是否全为False,all(axis=1) 表示按行判断所有列是否都满足条件
  • & 表示两个条件必须同时满足,取反后就得到我们需要保留的行

2. 删除所有FIB为True且其余布尔列均为False的行

逻辑和上面完全一致,只是把目标列换成FIB即可:

# 筛选并保留:排除「FIB为True + 其他所有布尔列全为False」的行
df = df[~((df['FIB'] == True) & ((df[bool_cols].drop('FIB', axis=1) == False).all(axis=1)))]

可选简化写法(适合列少的情况)

如果你的布尔列不多,也可以用query方法直接写条件,更直观:

# 删除NIT符合条件的行
df = df.query("not (NIT == True and ISM == False and AAAL == False and GSOG == False and GSI == False and AN == False and FIB == False)")

# 删除FIB符合条件的行
df = df.query("not (FIB == True and ISM == False and AAAL == False and GSOG == False and GSI == False and AN == False and NIT == False)")

这种写法虽然直白,但如果布尔列很多的话,还是前面的方法更高效,不用手动列所有列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:17:53