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

如何在Pandas数据框中对同名多列执行逆透视(Unpivot)操作?

解决重复列名的Pandas数据框逆透视问题

当然可以实现这种转换!针对你这种带有重复列名的DataFrame,我们可以用Pandas的内置操作快速完成需求。

首先,先还原你给出的示例数据(因为重复列名在构造时需要注意,Pandas会自动处理重复列名的显示):

import pandas as pd

# 构造你的原始数据框
df = pd.DataFrame({
    'pp': [5, 5],
    'b': [0.001464, 0.001459],
    'pp': [6, 6],
    'b': [0.001853, 0.001843]
})

方法一:按列名分组后纵向拼接

这是最直接的方法,核心思路是提取每个唯一列名对应的所有列,然后把它们纵向拼接起来:

# 获取所有唯一列名
unique_cols = df.columns.unique()
# 按列名分组提取并拼接
result = pd.concat([df[col] for col in unique_cols], axis=0).reset_index(drop=True)

执行后得到的result就是你期望的输出:

pp         b
0  5.0  0.001464
1  5.0  0.001459
2  6.0  0.001853
3  6.0  0.001843

方法二:转置后分组展开(备选)

如果你想尝试另一种思路,可以先转置数据框,按列名分组后展开数据,再重新整理结构:

# 转置数据框
df_transposed = df.T
# 添加列名标识列
df_transposed['column_name'] = df_transposed.index
# 分组后展开所有值,再重新整理结构
result = df_transposed.groupby('column_name')\
                      .apply(lambda x: x.values.flatten())\
                      .explode()\
                      .unstack('column_name')\
                      .reset_index(drop=True)

这个方法同样能得到相同的结果,适合理解数据结构的转换逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:08