如何高效统计DataFrame多列非空行对应t2d列的True/False数量
解决方案
核心思路
利用Pandas的向量化操作替代循环,批量处理所有表型列:先筛选各表型列非空的行,再统计对应t2d列中True和False的数量,最后整理成目标格式。
代码实现
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'Phenotype1': [True, np.nan, False, False], 'Phenotype2': [False, True, np.nan, False], 't2d': [True, False, np.nan, True] }) # 提取所有表型列(排除t2d列) pheno_cols = df.columns.drop('t2d') # 批量统计各表型列对应的t2d值分布 stats = df[pheno_cols].apply( lambda col: df.loc[col.notna(), 't2d'].value_counts(dropna=True).reindex([True, False], fill_value=0) ).T.reset_index() # 重命名列以匹配目标格式 stats.columns = ['phenotype', 't2d_true', 't2d_false'] # 输出结果 print(stats)
输出结果
phenotype t2d_true t2d_false 0 Phenotype1 2 0 1 Phenotype2 2 1
代码说明
df.columns.drop('t2d'):自动提取所有表型列,无需手动指定,适配数千列的场景。apply:Pandas内置批量处理方法,效率远高于Python循环。col.notna():快速筛选当前表型列非空的行,精准定位需要统计的t2d数据。value_counts(dropna=True):统计t2d中True和False的频次,自动忽略t2d本身的缺失值。reindex([True, False], fill_value=0):确保每个统计结果都包含True和False的计数,缺失项补0,保证格式统一。
内容的提问来源于stack exchange,提问作者curious
相关产品推荐
相关产品推荐

