web-dev-qa-db-fra.com

Tri multi-index dans Pandas

J'ai un ensemble de données avec des colonnes multi-index dans un pandas df que j'aimerais trier par valeurs dans une colonne spécifique. J'ai essayé d'utiliser sortindex et sortlevel mais je n'ai pas réussi à obtenir le résultats que je recherche. Mon jeu de données se présente comme suit:

    Group1    Group2
    A B C     A B C
1   1 0 3     2 5 7
2   5 6 9     1 0 0
3   7 0 2     0 3 5 

Je souhaite trier toutes les données et l'index par la colonne C du groupe 1 par ordre décroissant pour donner les résultats suivants:

    Group1    Group2
    A B C     A B C
 2  5 6 9     1 0 0
 1  1 0 3     2 5 7
 3  7 0 2     0 3 5 

Est-il possible de faire ce tri avec la structure dans laquelle mes données se trouvent ou devrais-je permuter Groupe1 du côté index?

73
MattB

Lors du tri par MultiIndex, vous devez contenir le tuple décrivant la colonne dans une liste *:

In [11]: df.sort_values([('Group1', 'C')], ascending=False)
Out[11]: 
  Group1       Group2      
       A  B  C      A  B  C
2      5  6  9      1  0  0
1      1  0  3      2  5  7
3      7  0  2      0  3  5

* afin de ne pas confondre pandas en pensant que vous voulez trier d'abord par groupe1 puis par c.


Remarque: initialement utilisé .sort depuis obsolète puis supprimé à 0,20, en faveur de .sort_values .

104
Andy Hayden