如何为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
相关产品推荐
相关产品推荐

