如何编写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')输出结果为5valid(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
相关产品推荐
相关产品推荐

