Pandas 透视表 – 如何按多列进行透视

huangapple go评论97阅读模式
英文:

Pandas Pivoted Table - How to Pivoting By Multiple Columns

问题

pivoted.columns = pd.MultiIndex.from_product([pivoted.columns.levels[0], ['Sum', 'Comm']])
pivoted.sort_index(axis=1, level=0, sort_remaining=False)
英文:

I have following data:

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]}


  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

I tried pivot table

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

and I got the result like this:

               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

How could I group it by Country at the top row?

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

Does anyone know how do I do it?

答案1

得分: 0

你可以简单地使用stackunstack函数:

pivoted.stack(0).unstack(-1)
国家          AU         HK         JP         SG      
            Comm   Sum Comm   Sum Comm   Sum Comm   Sum
客户  产品                                             
A    股票    1.0  78.0  NaN   NaN  2.0  88.0  NaN   NaN
B    外汇    NaN   NaN  NaN   NaN  3.0  85.0  NaN   NaN
C    外汇    NaN   NaN  4.0  82.0  NaN   NaN  NaN   NaN
     股票    NaN   NaN  5.0  87.0  NaN   NaN  NaN   NaN
D    外汇    NaN   NaN  NaN   NaN  NaN   NaN  6.0  99.0
英文:

You can simply stack and unstack:

pivoted.stack(0).unstack(-1)
Country          AU         HK         JP         SG      
               Comm   Sum Comm   Sum Comm   Sum Comm   Sum
Client Product                                            
A      Stock    1.0  78.0  NaN   NaN  2.0  88.0  NaN   NaN
B      FX       NaN   NaN  NaN   NaN  3.0  85.0  NaN   NaN
C      FX       NaN   NaN  4.0  82.0  NaN   NaN  NaN   NaN
       Stock    NaN   NaN  5.0  87.0  NaN   NaN  NaN   NaN
D      FX       NaN   NaN  NaN   NaN  NaN   NaN  6.0  99.0

huangapple
  • 本文由 发表于 2023年3月7日 00:56:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/75653667.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定