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

如何获取Pandas DataFrame每行的第二个非空列名称?

获取每行的第二个非空列名称

好问题!既然你已经掌握了获取每行第一个非空列名的方法,要拿到第二个其实可以换个思路——先提取每行所有非空值对应的列名,再从中选取第二个元素。

实现代码

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({
    'A': [1.0, None, 7.0],
    'B': [None, 1.0, 1.0],
    'C': [2.0, 4.0, 2.0]
})

# 第一步:提取每行的非空列名列表
non_null_col_lists = df.apply(lambda row: row.dropna().index.tolist(), axis=1)

# 第二步:分别提取第一个和第二个非空列名
df['first'] = non_null_col_lists.str[0].astype('string')
df['second'] = non_null_col_lists.str[1].astype('string')

print(df)

输出结果

A    B    C first second
0  1.0  NaN  2.0     A      C
1  NaN  1.0  4.0     B      C
2  7.0  1.0  2.0     A      B

代码解释

  • df.apply(lambda row: row.dropna().index.tolist(), axis=1):遍历DataFrame的每一行,先删除该行的空值,再把剩下的列名转换成列表。比如第一行处理后得到['A', 'C']。
  • non_null_col_lists.str[0]:从每个列表中取第一个元素,对应你要的first列;str[1]取第二个元素,就是second列。
  • 最后用astype('string')把结果转换成字符串类型,和你原来的处理方式保持一致。

额外提示

如果你的数据中存在只有1个非空值的行,str[1]会返回NaN。如果需要处理这种情况,可以用fillna()填充默认值,比如:

df['second'] = non_null_col_lists.str[1].astype('string').fillna('No second value')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:54:08