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

如何调整pandas pivot_table将横向展示的数值字段转为纵向排列

解决方案

方法1:基于你现有stack()结果调整

你已经通过stack(0)把数值字段转成了行索引的第二级,只需要把行索引转为普通列,再调整列顺序即可:

# 承接你已有的p1结果
s3 = p1.stack(0).reset_index()
# 重命名数值字段对应的列
s3 = s3.rename(columns={"level_1": "数值字段"})
# 调整列顺序,把数值字段放在第一列
s3 = s3[["数值字段", "b", "a", "b", "c"]]

输出的结构如下:

数值字段babc
n1d1.01.0NaN
n2d5.06.0NaN
n3d10.010.0NaN
n1fNaNNaN1.0
n2fNaNNaN7.0
n3fNaNNaN10.0

方法2:先转长表再透视,一步到位

如果不想后续调整结构,可以先把宽表转为长表,再做透视,直接得到目标格式:

import pandas as pd
# 测试数据
exp_1 = pd.DataFrame({'a':['a','b','c'],'b':['d','d','f'],'n1':[1,1,1],'n2':[5,6,7],'n3':[10,10,10]})
# 先把n1/n2/n3转为行维度
exp_1_long = exp_1.melt(id_vars=['a','b'], value_vars=['n1','n2','n3'], var_name='数值字段')
# 透视时直接把数值字段设为第一级索引
p1_new = exp_1_long.pivot_table(index=['数值字段','b'], columns='a', values='value', aggfunc='sum').reset_index()

两种方法最终得到的结果完全一致,都可以实现将n1、n2、n3作为单独第一列展示的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:48:00