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

如何为DataFrame添加列存储每行首个非NaN/Null的列名

为DataFrame添加首个非空列名列的实现方法

示例需求

基于DataFrame的A、B、C、D列,生成名为First的新列,存储每行中首个非NaN/Null值所在的列名;若该行所有目标列均为空,则First列设为Null。示例结果如下:

Name A B C D First
Alex 100 NaN Null NaN A
Michael 300 400 Null Null A
Steve Null 100 100 100 B
John Null Null NaN Null Null

实现代码

1. 构造示例数据

import pandas as pd
import numpy as np

data = {
    'Name': ['Alex', 'Michael', 'Steve', 'John'],
    'A': [100, 300, np.nan, np.nan],
    'B': [np.nan, 400, 100, np.nan],
    'C': [np.nan, np.nan, 100, np.nan],
    'D': [np.nan, np.nan, 100, np.nan]
}
df = pd.DataFrame(data)

2. 生成First列

# 指定需要检查的目标列
target_cols = ['A', 'B', 'C', 'D']

# 标记非空值为True,取每行首个True对应的列名
df['First'] = df[target_cols].notna().idxmax(axis=1)

# 处理所有目标列均为空的行,设为NaN(对应示例中的Null)
all_null_mask = df[target_cols].isna().all(axis=1)
df.loc[all_null_mask, 'First'] = np.nan

3. 查看结果

执行print(df)后输出:

Name      A      B      C      D First
0     Alex  100.0    NaN    NaN    NaN     A
1  Michael  300.0  400.0    NaN    NaN     A
2    Steve    NaN  100.0  100.0  100.0     B
3     John    NaN    NaN    NaN    NaN   NaN

代码说明

  • notna():将DataFrame中的非空值转换为True,空值转换为False,便于定位首个非空位置
  • idxmax(axis=1):返回每行中第一个True对应的列名,即该行首个非空值所在的列
  • isna().all(axis=1):筛选出所有目标列均为空的行,将这些行的First列设为NaN,匹配示例中的Null场景

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:20:29