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

如何提取DataFrame中满足“大于0行数占比≥20%”的列

正确实现方法

先说说你原代码里的问题:

  • df3[df3 > 0]生成的是布尔值构成的DataFrame,但你后续用is去和数值比较完全不对,is是用来比较对象身份的,不是数值大小
  • df3.iloc[1:, 1:]取的是从第二行第二列开始的子数据集,和你要计算全行列比例的需求不匹配
  • 循环遍历列的方式也绕远路了,pandas有内置方法可以直接批量计算

直接用pandas的向量操作就能高效解决:

步骤分解

  1. 计算每一列中数值大于0的行数占总行数的比例:
    用(df3 > 0).mean(),布尔值在计算均值时会被转成1(True)和0(False),所以结果就是符合条件的行数占比。
  2. 筛选出占比≥20%(即0.2)的列名:
    用布尔索引过滤上述结果,提取符合条件的列名。
  3. 从原DataFrame中提取这些列:
    用筛选出的列名子集去索引原DataFrame。

完整代码

# 计算每列大于0的行数占比
positive_ratio = (df3 > 0).mean()
# 筛选占比≥0.2的列
qualified_cols = positive_ratio[positive_ratio >= 0.2].index
# 提取符合条件的列
filtered_df = df3[qualified_cols]

一行简化版

如果想更简洁,也可以把步骤合并成一行:

filtered_df = df3.loc[:, (df3 > 0).mean() >= 0.2]

这里loc[:, ...]的冒号表示保留所有行,后面的布尔数组用来筛选列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:50:24