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

如何编写Python函数统计DataFrame指定列范围的非全空行数量

实现方案

你可以直接用pandas原生的列切片+按行非空判断逻辑实现,相比原始求和判断的写法性能更高,完整实现如下:

import pandas as pd
import numpy as np

def valid(df, start_col, end_col):
    # 截取起始列到结束列的闭区间列子集
    sub_df = df.loc[:, start_col:end_col]
    # 逐行判断是否存在至少一个非空值,统计符合条件的总行数
    return sub_df.notnull().any(axis=1).sum()

调用说明

  • 传入的起始、结束列名需要为字符串格式,示例测试结果和需求完全匹配:
    • valid(df, 'q2', 'q7') 输出结果为5
    • valid(df, 'q5', 'q12') 输出结果为3

验证测试代码

你可以用你给出的示例DataFrame做测试:

# 构造示例数据
data = {
    'id': [1,2,3,4,5],
    'q2': [1,2,np.nan,3,7],
    'q7': [2,4,5,np.nan,np.nan],
    'q3': [2,8,np.nan,np.nan,np.nan],
    'q5': [9,9,np.nan,np.nan,np.nan],
    'q12': [np.nan, np.nan, np.nan, np.nan, 2]
}
df = pd.DataFrame(data)

# 执行测试
print(valid(df, 'q2', 'q7'))
print(valid(df, 'q5', 'q12'))

说明:用any(axis=1)替代sum(axis=1)>0不需要做额外求和运算,只要判断存在至少一个非空值就返回True,大数据量下性能优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:57:02