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

如何在Python中用Pivot函数按CType将USD与EU列并排展示

动态调整Pivot后的数据列顺序(按CType分组并排展示)

现有如下数据构造代码:

from collections import OrderedDict
import pandas as pd
import numpy as np

table = OrderedDict((
    ("Item", ['Item0', 'Item0', 'Item1', 'Item1']),
    ('CType',['Gold', 'Bronze', 'Gold', 'Silver']),
    ('USD',  ['1$', '2$', '3$', '4$']),
    ('EU',   ['1€', '2€', '3€', '4€'])
))
d = pd.DataFrame(table)

生成的初始表格:

ItemCTypeUSDEU
0Item0Gold1$1€
1Item0Bronze2$2€
2Item1Gold3$3€
3Item1Silver4$4€

使用常规pivot代码后:

p = d.pivot(index='Item', columns='CType')
p.columns = p.columns.map('.'.join)
p = p.reset_index()

得到的列顺序是按原指标(USD/EU)分组,而非按CType分组:

ItemUSD.BronzeUSD.GoldUSD.SilverEU.BronzeEU.GoldEU.Silver
0Item02$1$NaN2€1€NaN
1Item1NaN3$4$NaN3€4€

需求是每个CType对应的USD和EU列并排展示,且CType数量可能动态变化,无法手动指定列顺序,期望结果如下:

ItemUSD.BronzeEU.BronzeUSD.GoldEU.GoldUSD.SilverEU.Silver
0Item02$2€1$1€NaNNaN
1Item1NaNNaN3$3€4$4€

实现方法

核心思路是利用pivot生成的多级列索引(MultiIndex),先调整层级顺序再排序,最后合并列名,无需手动指定列:

# 执行pivot,保留多级列索引
p = d.pivot(index='Item', columns='CType')

# 交换列的层级:将原第二层级(CType)移到第一层级,原第一层级(USD/EU)移到第二层级
p = p.swaplevel(axis='columns')

# 按列索引排序,确保每个CType下的USD、EU连续排列
p = p.sort_index(axis='columns')

# 合并多级列索引为字符串格式
p.columns = p.columns.map('.'.join)

# 重置索引,将Item从索引转为列
p = p.reset_index()

运行后即可得到期望的列顺序,无论CType新增或减少,代码都能自动适配。

关键步骤解释

  • swaplevel(axis='columns'):交换多级列索引的层级,把CType放到最外层,这样排序时会先按CType分组
  • sort_index(axis='columns'):对列索引排序,同一CType下的USD和EU会自然排列在一起
  • 最后合并列名并重置索引,完成格式转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:00:49