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

如何为Pandas DataFrame每行生成缺失值列汇总

嘿,这里有两种实用的方法帮你给Pandas DataFrame添加汇总缺失值列名的summary列,直接上代码和细节解释:

方法一:简洁的apply写法(适合小数据集)

先构造你的示例DataFrame,然后一行代码搞定列的生成:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'a': [pd.NA, pd.NA, pd.NA, 15.0, 5.0],
    'b': [2.0, 9.0, pd.NA, 15.0, pd.NA],
    'c': [165.0, pd.NA, pd.NA, pd.NA, 11.0]
})

# 生成summary列:遍历每行,收集缺失值的列名并用' + '拼接
df['summary'] = df.apply(
    lambda row: ' + '.join(col for col, val in row.items() if pd.isna(val)),
    axis=1
)

方法二:向量化操作(更高效,推荐大数据集)

如果你的数据集行数很多,apply的逐行循环会有点慢,试试这个向量化的方案:

# 先得到标记缺失值的布尔矩阵
na_mask = df.isna()
# 按行筛选出对应为True的列名,再拼接
df['summary'] = na_mask.apply(lambda x: ' + '.join(na_mask.columns[x]), axis=1)

运行结果

不管用哪种方法,最终都会得到你想要的结果:

abcsummary
0NaN2.0165.0a
1NaN9.0NaNa + c
2NaNNaNNaNa + b + c
315.015.0NaNc
45.0NaN11.0b

简单解释

  • df.isna():生成一个和原DataFrame结构一样的布尔表,每个单元格标记对应值是不是NaN。
  • axis=1:告诉apply我们要按行来处理数据,而不是默认的按列。
  • 方法二的核心是先拿到所有缺失值的标记,再直接提取对应列名,避免了逐元素遍历,速度会快很多。

内容的提问来源于stack exchange,提问作者rafat.ch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:11:25