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

如何用Pandas按内容筛选布尔列?保留多数为False的列

筛选Pandas DataFrame中多数值为False的布尔列

需求描述

我有一个包含布尔列的DataFrame,需要筛选掉多数值为True的列,仅保留多数值为False的列。示例DataFrame如下:

A     B     C
0   True  False True
1   False False True
2   True  True  False

筛选后应仅保留列B。我已实现如下解决方案:

def check_mostly_false(col):
    values, counts = np.unique(df[col], return_counts=True)
    if values[np.argmax(counts)] == False:
         return True
    return False
false_columns = list(filter(check_mostly_false, df.columns))

想了解是否有更简洁高效的实现方式,比如利用Pandas原生功能。


简洁高效的Pandas原生实现

可以利用Pandas对布尔类型的数值化处理(True=1,False=0),结合向量化操作快速筛选:

方法1:基于均值判断

# 筛选出True占比小于50%的列(即False占多数)
filtered_columns = df.columns[df.mean() < 0.5]
filtered_df = df[filtered_columns]

方法2:基于计数判断

# 筛选出True的数量小于总行数一半的列
filtered_columns = df.columns[df.sum() < len(df)/2]
filtered_df = df[filtered_columns]

原理说明

布尔类型在Pandas中会被自动转换为数值参与计算:

  • df.mean()计算每列中True的占比,占比<0.5意味着False的数量多于True
  • df.sum()计算每列中True的总数,总数<总行数的一半同样说明False占多数

这两种方法都是Pandas原生的向量化操作,比原方案的循环+numpy调用效率更高,尤其是处理大型DataFrame时优势明显,代码也更简洁易读。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:54:18