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

如何在Pandas中将指定列堆叠为新增行实现列转行

解决方案:Pandas列堆叠转换

原始数据与目标结构

原始DataFrame

Typea_PORTa_BENCHa_ACTIVEb_PORTb_BENCH
None2025183050

目标DataFrame

TypePORTBENCHACTIVE
a202518
b3050

代码实现

方法一:多级列索引+转置重塑

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'Type': ['None'],
    'a_PORT': [20],
    'a_BENCH': [25],
    'a_ACTIVE': [18],
    'b_PORT': [30],
    'b_BENCH': [50]
})

# 移除无用的Type列
df = df.drop('Type', axis=1)

# 拆分列名为(分组标识,指标类型)的多级索引
df.columns = df.columns.str.split('_', expand=True)

# 转置后重置索引,再通过pivot重塑为目标结构
result = df.T.reset_index()
result.columns = ['Type', 'value']
result = result.pivot(index='Type', columns='level_1', values='value').reset_index()

# 清除列名的层级标签,空值替换为空字符串
result.columns.name = None
result = result.fillna('')

print(result)

方法二:melt拆分+ pivot重塑

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'Type': ['None'],
    'a_PORT': [20],
    'a_BENCH': [25],
    'a_ACTIVE': [18],
    'b_PORT': [30],
    'b_BENCH': [50]
})

# 移除无用Type列,将列转为行记录
df_melt = df.drop('Type', axis=1).melt(var_name='col', value_name='value')

# 拆分列名得到分组标识和指标类型
df_melt[['Type', 'Category']] = df_melt['col'].str.split('_', expand=True)

# 重塑为目标结构,处理空值
result = df_melt.pivot(index='Type', columns='Category', values='value').reset_index()
result.columns.name = None
result = result.fillna('')

print(result)

关键步骤说明

  1. 清理无效列:原始Type列值为None,无实际分组意义,直接移除。
  2. 拆分列名:通过下划线分隔列名,提取出分组标识(a/b)和指标类型(PORT/BENCH/ACTIVE)。
  3. 重塑结构:利用转置+pivot或melt+pivot的组合,将原横向的分组指标转为纵向的分组行记录,同时将指标类型转为列。
  4. 空值处理:用fillna('')将缺失的ACTIVE值转为空字符串,匹配目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:50:23