如何高效合并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
相关产品推荐
相关产品推荐

