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

如何合并单个DataFrame内的多个同名列,得到仅含foo和bar的两列

Pandas 多同名列合并方案

核心实现逻辑

因为每行同名列仅存在一个非空值,直接按列名对列分组,提取每行非空值即可完成合并。

完整代码示例

import pandas as pd
import numpy as np

# 构造和你描述结构一致的测试DataFrame
df = pd.DataFrame(
    [
        [1, np.nan, 1, np.nan, np.nan, np.nan, np.nan, np.nan],
        [np.nan, 3, np.nan, 2, np.nan, np.nan, np.nan, np.nan],
        [np.nan, np.nan, np.nan, np.nan, 3, 5, np.nan, np.nan],
        [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 7, 4]
    ],
    columns=['foo', 'foo', 'bar', 'bar', 'bar', 'foo', 'foo', 'bar']
)

# 核心合并代码:按列名分组,取每行第一个非空值
df_merged = df.groupby(level=0, axis=1).first()

可选兼容方案

如果担心存在某行同名列全空的异常场景,可使用sum方法加min_count参数避免错误输出0值:

# 仅当存在至少1个非空值时才返回计算结果,否则返回NaN
df_merged = df.groupby(level=0, axis=1).sum(min_count=1)

如果你的空值是空字符串而非np.nan,先做格式转换再执行合并:

df = df.replace('', np.nan)

输出结果

最终得到的df_merged完全符合预期:

索引foobar
011
132
253
374

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:57:05