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

如何在同一DataFrame中合并重复列,用非空值填充缺失值?

解决重复列合并问题

针对你遇到的重复列合并需求,直接用groupby结合first()就能快速实现,不用纠结先改列名再拼接的索引问题,步骤如下:

1. 构造示例数据

先还原你的输入DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Info_r1_c1': [np.nan, np.nan, 300, np.nan, 600, np.nan, 6.9],
    'Info_r1_c1': [np.nan, 198, np.nan, np.nan, np.nan, 460, np.nan]
})

2. 合并重复列

对列名进行分组,然后取每组内的第一个非空值(正好匹配你的期望输出):

df_merged = df.groupby(df.columns, axis=1).first()

运行后得到的df_merged就是你要的结果:

Info_r1_c1
0         NaN
1       198.0
2       300.0
3         NaN
4       600.0
5       460.0
6         6.9

3. 解决先改列名再拼接的索引错误

如果一定要先修改第二个DataFrame的列名再拼接,出现索引错误大概率是两个DataFrame的索引不匹配,拼接时加上ignore_index=True重置索引即可:

# 假设df1是第一个DataFrame,df2是第二个
df2.columns = df1.columns
df_concat = pd.concat([df1, df2], axis=1, ignore_index=True)
# 之后再用上面的groupby方法合并重复列

补充说明

  • 如果同一行的重复列都有非空值,first()会取第一列的值;如果想取最后一列,换成last()即可。
  • 也可以用bfill(axis=1).iloc[:, 0]实现,原理是按行向后填充NaN,然后取第一列,效果和first()一致:
df_merged = df.bfill(axis=1).iloc[:, 0].to_frame()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:35:26