pandas中如何基于列名将同DataFrame的多列合并为单列
pandas多列合并为单列解决方案
针对你描述的每行仅存在一个非NaN值的场景,pandas内置多种方法可以快速实现需求,以下是3种常用方案:
- 方案1:逐行填充法(性能最优,适合大数据量)
因为每行仅存在一个非空值,按行填充空值后取任意一列即可获得所有有效值:
# 按行向后填充空值后取第一列 df['name'] = df.bfill(axis=1).iloc[:, 0] # 仅保留合并后的新列 df = df[['name']]
- 方案2:stack自动丢弃空值法
stack方法会将列转为行层级,默认丢弃NaN值,刚好匹配你的场景:
df['name'] = df.stack().reset_index(drop=True) df = df[['name']]
- 方案3:优先级取值法(适合行内可能有多个非空值,需要指定取值优先级的场景)
如果你需要按照name1>name2>name3的优先级取有效值,可使用combine_first链式调用:
df['name'] = df['name1'].combine_first(df['name2']).combine_first(df['name3'])
内容的提问来源于stack exchange,提问作者venkateshprakesh
相关产品推荐
相关产品推荐

