You need to enable JavaScript to run this app. pandas DataFrame如何合并重复列生成唯一列结构
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame如何合并重复列生成唯一列结构

实现pandas重复列合并为规整纵向结构的方法

目标结构说明

你当前的原始DataFrame为单行四列、列名重复(AB、XY、AB、XY),对应值为yyy、xxx、xrx、zzz,需要转换为两列(AB、XY)、两行分别对应同名列横向取值的规整结构:

ABXY
yyyxxx
xrxzzz

可直接运行的实现代码

首先构造与你描述完全匹配的原始测试DataFrame:

import pandas as pd

# 原始重复列DataFrame
raw_df = pd.DataFrame(
    [["yyy", "xxx", "xrx", "zzz"]],
    columns=["AB", "XY", "AB", "XY"]
)

方法1:同名列逐列提取拼接(逻辑最直观)

核心逻辑是提取每个唯一列名下的所有横向重复值,将其转为纵向序列,最终拼接为规整表:

# 拿到无重复的列名列表
unique_columns = raw_df.columns.unique()

# 逐列提取重复值并转为纵向序列,拼接为新DataFrame
result = pd.concat(
    [
        raw_df[col].stack().reset_index(drop=True).rename(col)
        for col in unique_columns
    ],
    axis=1
)

方法2:转置后按列名分组处理(适合大规模数据)

核心逻辑是先转置把原来的列名转为行索引,再按列名分组拆分横向的重复列组,适配更大体量的重复列场景:

# 先将原表转置,原列名转为行索引
transposed_df = raw_df.T

# 按列名分组,将同组的重复列值拆为独立行,再转置回目标结构
result = transposed_df.groupby(level=0).apply(
    lambda group: group.reset_index(drop=True).T
).droplevel(0).reset_index(drop=True)

效果验证

两种方法运行后得到的result均与目标结构完全一致:

AB   XY
0  yyy  xxx
1  xrx  zzz

注意:如果不同列名的重复出现次数不一致,上述两种方法都会自动按最短重复次数对齐,缺失值自动填充为NaN,无需额外兼容处理


内容的提问来源于stack exchange,提问作者oyugi.collins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 12:06:08