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

如何为DataFrame按非NaN值数量分配标签并提取对应列?

解决方案

步骤拆解

要实现需求,核心是先统计各列非NaN值的数量,再筛选符合条件的列,最终保留目标列:

  • 排除Name列,统计其余列的非NaN值计数
  • 过滤出计数大于2的列
  • 从符合条件的列中选择非NaN值最多的列(若有并列,可按列顺序取第一个)
  • 提取Name列和选中的目标列

代码实现

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'Name': ['A', 'A', 'A', 'A'],
    'Orange': [np.nan, np.nan, np.nan, 'ok'],
    'Blue': [np.nan, np.nan, 'ok', np.nan],
    'Red': ['ok', np.nan, 'ok', 'ok'],
    'Black': [np.nan, np.nan, np.nan, 'ok']
})

# 1. 计算各数值列的非NaN数量(排除Name列)
non_nan_counts = df.drop('Name', axis=1).notna().sum()

# 2. 筛选出非NaN数量>2的列
valid_cols = non_nan_counts[non_nan_counts > 2].index.tolist()

# 3. 选择非NaN数量最多的列(若并列取第一个)
if valid_cols:
    target_col = non_nan_counts[valid_cols].idxmax()
    # 4. 提取结果
    result_df = df[['Name', target_col]]
else:
    # 无符合条件的列时的处理(可根据需求调整)
    result_df = df[['Name']]

print(result_df)

输出结果

Name  Red
0    A   ok
1    A  NaN
2    A   ok
3    A   ok

关键说明

  • df.drop('Name', axis=1).notna().sum():精准统计除Name外每列的非NaN值数量
  • non_nan_counts[valid_cols].idxmax():在符合条件的列中找到非NaN值最多的列名
  • 增加了无符合条件列的分支处理,避免报错

内容的提问来源于stack exchange,提问作者isaac.af95

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:35:45