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

如何选择存在任意两列非空的行?以及如何筛选DataFrame中非零列数超过2的行?

让我来帮你搞定这两个Pandas数据筛选的问题:

问题1:如何选择存在任意两列不为空的行?

要实现这个需求,核心是统计每行中非空值的数量,再筛选出数量≥2的行就行。

假设你的DataFrame名为df,如果要检查全部列的非空情况,代码可以这么写:

# 统计每行非空值的数量,筛选数量≥2的行
filtered_df = df[(df.notna()).sum(axis=1) >= 2]

如果只需要检查特定列(比如列名为col1、col2、col3的几列),可以指定列子集:

# 仅统计指定列的非空数量
filtered_df = df[(df[['col1', 'col2', 'col3']].notna()).sum(axis=1) >= 2]

原理很简单:df.notna()会把所有非空值转换成True(等价于1),空值转换成False(等价于0);sum(axis=1)按行求和,得到每行的非空列数量;最后通过>=2筛选出符合条件的行。

问题2:筛选非零列数量超过2的行

你原来的代码用了.any(1),这个方法只要行里有一个非零值就会返回True,所以只能筛选出至少1个非零列的行。要统计非零列的数量,只需要把.any(1)换成.sum(axis=1),再判断数量是否超过2就行。

修改后的代码如下:

# 统计第2到12列(iloc[:,1:13])的非零数量,筛选数量>2的行
filtered_df = df[(df.iloc[:, 1:13] != 0.0).sum(axis=1) > 2]

解释一下:

  1. df.iloc[:, 1:13] != 0.0生成一个布尔DataFrame,非零值对应True,零值对应False
  2. .sum(axis=1)按行计算True的数量(也就是非零列的个数)
  3. >2筛选出非零列数量超过2的行——如果你的需求是“至少2个”,就把>2改成>=2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:37:38