99 votes

Triage multi-index dans Pandas

J'ai un ensemble de données avec des colonnes multi-index dans un df pandas que je voudrais trier par les valeurs d'une colonne spécifique. J'ai essayé d'utiliser sortindex et sortlevel mais je n'ai pas réussi à obtenir les 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 veux trier toutes les données et l'index par la colonne C dans le groupe 1 en ordre décroissant pour que mes résultats ressemblent à ceci :

    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 se trouvent mes données, ou dois-je échanger Group1 contre le côté index ?

152voto

Andy Hayden Points 38010

Lors du tri par un 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 d'éviter que les pandas ne pensent que vous voulez trier d'abord par Group1 puis par C.


Note : Utilisé à l'origine .sort depuis qu'il a été déprécié puis supprimé en 0.20, en faveur de .sort_values .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X