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
相关产品推荐
相关产品推荐

