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

如何统计Pandas DataFrame每行高于阈值的列数并筛选符合条件的行

问题排查与解决方法

原代码错误原因

  • lambda 语法不完整:Python 单行条件表达式必须包含if和else两个分支,你写的lambda x: x.count() if x > 2缺少else分支,直接触发语法错误
  • 逻辑判断错误:x > 2是对整行数据做比较,返回的是布尔值序列,不能直接作为if的判断条件;另外你需求是判断数值大于1,阈值写为2也不符合要求
  • 统计方法错误:x.count()是统计当前行非空值的总数,不是统计满足「数值大于1」的列数,逻辑不匹配

最优解决方案

优先使用Pandas向量化操作,比apply遍历行效率更高,不需要单独写循环判断:

1. 一步直接筛选符合要求的子集

# 直接筛选出至少2个列数值大于1的行,不需要额外新增列
filtered_df = df[(df > 1).sum(axis=1) >= 2]

2. 需要保留符合条件的列数供后续排序/分析的写法

# 新增列存储每行中数值大于1的列数
df['符合条件列数'] = (df > 1).sum(axis=1)
# 再做筛选
filtered_df = df[df['符合条件列数'] >= 2]

示例运行结果

用你给出的测试数据运行后,会筛选出索引为1和4的两行,正好符合「至少2个列大于1」的要求。

apply写法的正确版本

如果你一定要用apply实现,参考以下代码:

df[9] = df.apply(lambda x: (x > 1).sum(), axis=1)
filtered_df = df[df[9] >=2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:03