web-dev-qa-db-fra.com

Quoi qu'il en soit pour réorganiser des colonnes de table pivot à Python?

Supposons que j'ai une table pivot comme celle-ci:

import pandas as pd

d = {'Col_A': [1,2,3,3,3,4,9,9,10,11], 
     'Col_B': ['A','K','E','E','H','A','J','A','L','A'],
     'Value1':[648,654,234,873,248,45,67,94,180,120],
     'Value2':[180,120,35,654,789,34,567,21,235,83]
    }

df = pd.DataFrame(data=d)
df_pvt = pd.pivot_table(df,values=['Value1','Value2'], index='Col_A', columns='Col_B', aggfunc=np.sum).fillna(0)
df_pvt

enter image description here

Ce que je veux réaliser, c'est de définir une commande pour col_b (en surbrillance) afin que les sorties de Value1 et Value2 affichent dans cet ordre E, J, A, K, L, H.

2
Jiamei

Convertir col_B à une catégorique avant de remodeler:

(df.astype({'Col_B' : pd.CategoricalDtype(['E', 'J', 'A', 'K', 'L', 'H'], ordered = True)})
   .pivot_table(values=['Value1','Value2'], 
                index='Col_A', 
                columns='Col_B', 
                aggfunc=np.sum)
)
      Value1                         Value2
Col_B      E   J    A    K    L    H      E    J    A    K    L    H
Col_A
1          0   0  648    0    0    0      0    0  180    0    0    0
2          0   0    0  654    0    0      0    0    0  120    0    0
3       1107   0    0    0    0  248    689    0    0    0    0  789
4          0   0   45    0    0    0      0    0   34    0    0    0
9          0  67   94    0    0    0      0  567   21    0    0    0
10         0   0    0    0  180    0      0    0    0    0  235    0
11         0   0  120    0    0    0      0    0   83    0    0    0

Pour réorganiser les colonnes, vous pouvez reindex, avec les arguments de mots clés correspondants:

(df.astype({'Col_B' : pd.CategoricalDtype(['E', 'J', 'A', 'K', 'L', 'H'], ordered = True)})
   .pivot_table(values=['Value1','Value2'], 
                index='Col_A', 
                columns='Col_B', 
                aggfunc=np.sum)
  .reindex(['Value2', 'Value1'], axis = 1, level = 0)
)

      Value2                          Value1
Col_B      E    J    A    K    L    H      E   J    A    K    L    H
Col_A
1          0    0  180    0    0    0      0   0  648    0    0    0
2          0    0    0  120    0    0      0   0    0  654    0    0
3        689    0    0    0    0  789   1107   0    0    0    0  248
4          0    0   34    0    0    0      0   0   45    0    0    0
9          0  567   21    0    0    0      0  67   94    0    0    0
10         0    0    0    0  235    0      0   0    0    0  180    0
11         0    0   83    0    0    0      0   0  120    0    0    0
3
sammywemmy