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

如何高效合并Pandas多列?每行仅单列有值其余为NaN

Pandas多列合并(每行仅一个有效值)的简洁高效方法

针对你描述的每行仅有一列存在有效值、其余均为NaN的DataFrame,以下是几种简洁高效的合并方法:


方法1:利用填充函数(bfill/ffill)

由于每行只有一个有效值,使用bfill(axis=1)(向后填充)或ffill(axis=1)(向前填充)会将有效值填充至整行的所有列,之后只需取第一列即可:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    '2020': [10, np.nan, 12, np.nan],
    '2021': [np.nan, 5, np.nan, np.nan],
    '2022': [np.nan, np.nan, np.nan, 15]
})

# 合并列并生成结果
df['Merged'] = df.bfill(axis=1).iloc[:, 0]
result = df[['Merged']]

方法2:使用stack()过滤NaN

stack()会将列转换为行索引层级,自动过滤掉NaN值,之后通过reset_index和to_frame生成单列DataFrame:

# 示例DataFrame同上
result = df.stack().reset_index(drop=True).to_frame('Merged')

方法3:利用聚合函数(max/sum)

因为每行仅一个有效值,max(axis=1)或sum(axis=1)会自动忽略NaN,直接提取该行的唯一有效值:

# 示例DataFrame同上
df['Merged'] = df.max(axis=1)
# 或使用sum:df['Merged'] = df.sum(axis=1)
result = df[['Merged']]

方法对比

  • bfill/ffill、max/sum:处理大数据集时效率更高,适合性能要求高的场景;
  • stack():代码最简洁,适合快速实现小数据量的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:15:12