Mis a jour le 2025-04-14, 12:10

Tri de Dataframes

Tri selon les étiquettes de lignes ou de colonnes :
  • df.sort_index(axis = 0, ascending = False) : renvoie un dataframe avec les lignes triées par ordre décroissant des labels (le défaut est ascendant) :
    
          A   B    C   D
    a3  5.3   9  1.5  15
    a2  2.7  10  5.4   7
    a1  1.1   2  3.3   4
        
  • df.sort_index(axis = 1, ascending = False) : renvoie un dataframe avec les colonnes triées par ordre décroissant des labels :
    
         D    C   B    A
    a1   4  3.3   2  1.1
    a2   7  5.4  10  2.7
    a3  15  1.5   9  5.3
        
Tri selon les valeurs :
  • df.sort_values(by = 'C') : renvoie un dataframe avec les lignes triées de telle sorte que la colonne 'C' soit dans l'ordre croissant :
    
          A   B    C   D
    a3  5.3   9  1.5  15
    a1  1.1   2  3.3   4
    a2  2.7  10  5.4   7
        
  • df.sort_values(by = ['C', 'A']) : tri selon 2 colonnes successives, d'abord C, puis A.
  • df.sort_values(by = 'C', ascending = False) : tri par ordre décroissant.
  • df.sort_values(by = ['C', 'A'], ascending = [True, False]) : tri selon 2 clefs, la première par ordre croissant et la 2ème par ordre décroissant.
  • df.sort_values(by = 'C', inplace = True) : ne renvoie rien et fait le tri en place.
  • df.sort_values(..., kind = 'mergesort') : utilise mergesort qui est un algorithme de tri stable (ne change pas l'ordre initial si valeurs de clefs identiques). Le défaut est quicksort qui n'est pas stable.
  • df.sort_values(by = ['a'], ..., key = myFunc) : applique myFunc à la series 'a' et retourne une series de la même taille qui donne la clef utilisée pour le tri (myFunc doit prendre une series et renvoyer une series).
  • df.sort_index(axis = 0, ..., key = myFunc) : applique myFunc à l'index et retourne un index qui est utilisé pour le tri.
  • Pour trier sur une colonne calculée : df = df.assign(newCol = df['A'] + df['C']).sort_values('newCol').drop('newCol', axis = 1)
Pour trier un dataframe selon les valeurs d'une colonne, mais en utilisant un dictionnaire qui donne l'ordre souhaité des colonnes :
  • myOrder = ['b', 'a', 'c'] : valeurs de la colonne df['A']
  • key = df['A'].map({myOrder[i]:i for i in range(len(myOrder))})
  • df.iloc[key.argsort()]
Ca marche aussi avec l'index du dataframe.

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert