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

Pandas透视表:如何将Country设为顶层列层级实现多列透视

调整透视表列层级:将Country设为列顶层

原始数据

data = {
    'Product': ['Stock', 'Stock','FX', 'FX', 'Stock', 'FX'],
    'Client': ['A', 'A','B', 'C', 'C','D'],
    'Country': ['AU', 'JP','JP', 'HK', 'HK','SG'],
    'Sum': [78, 88, 85,82, 87,99],
    'Comm': [1,2,3,4,5,6]}

# 对应的DataFrame展示:
#   Product Client Country  Sum  Comm
# 0   Stock      A      AU   78     1
# 1   Stock      A      JP   88     2
# 2      FX      B      JP   85     3
# 3      FX      C      HK   82     4
# 4   Stock      C      HK   87     5
# 5      FX      D      SG   99     6

当前尝试及结果

使用以下代码创建透视表:

pivoted = df_1.pivot_table(
    index=['Client', 'Product'],
    columns='Country',
    values=['Comm', 'Sum'])

得到的结果(值字段为列顶层):

Comm                  Sum                  
Country          AU   HK   JP   SG    AU    HK    JP    SG
Client Product                                            
A      Stock    1.0  NaN  2.0  NaN  78.0   NaN  88.0   NaN
B      FX       NaN  NaN  3.0  NaN   NaN   NaN  85.0   NaN
C      FX       NaN  4.0  NaN  NaN   NaN  82.0   NaN   NaN
       Stock    NaN  5.0  NaN  NaN   NaN  87.0   NaN   NaN
D      FX       NaN  NaN  NaN  6.0   NaN   NaN   NaN  99.0

目标格式

希望将Country设为列顶层,得到如下结构:

Country         AU        HK        JP       SG            
                Sum Comm  Sum Comm  Sum Comm Sum Comm
Client Product                                            
A      Stock    78.0 1.0  NaN NaN   88.0 2.0 NaN NaN
B      FX       NaN  NaN  NaN Nan   85.0 3.0 NaN NaN 
C      FX       NaN NaN   82.0 4.0  NaN NaN  NaN NaN
       Stock    NaN NaN   87.0 5.0  NaN NaN  NaN NaN
D      FX       NaN NaN   NaN NaN   NaN NaN  99.0 6.0

解决方案

只需对生成的透视表列层级进行交换并排序即可:

# 生成初始透视表
pivoted = df_1.pivot_table(
    index=['Client', 'Product'],
    columns='Country',
    values=['Comm', 'Sum'])

# 交换列的两个层级,将Country移到顶层,再按顶层列排序
pivoted = pivoted.swaplevel(axis=1).sort_index(axis=1)

说明

  • swaplevel(axis=1):交换列索引的两个层级(原顶层为Comm/Sum,第二层为Country,交换后Country成为顶层)
  • sort_index(axis=1):按顶层的Country列进行排序,确保同一国家对应的Sum和Comm字段相邻排列

执行后即可得到目标格式的透视表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:40:20