如何在同一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
相关产品推荐
相关产品推荐

