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?
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