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

如何高效统计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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:10