如何用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的数量多于Truedf.sum()计算每列中True的总数,总数<总行数的一半同样说明False占多数
这两种方法都是Pandas原生的向量化操作,比原方案的循环+numpy调用效率更高,尤其是处理大型DataFrame时优势明显,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者Nourless
相关产品推荐
相关产品推荐

