Pandas : Comment trier le DataFrame en fonction de la colonne de chaîne
Vous pouvez utiliser les méthodes suivantes pour trier les lignes d’un DataFrame pandas en fonction des valeurs d’une colonne de chaîne particulière :
Méthode 1 : Trier par colonne de chaîne (lorsque la colonne ne contient que des caractères)
df = df.sort_values('my_string_column')
Méthode 2 : Trier par colonne de chaîne (lorsque la colonne contient des caractères et des chiffres)
#create 'sort' column that contains digits from 'my_string_column' df['sort'] = df['my_string_column'].str.extract('(\d+)', expand=False).astype(int) #sort rows based on digits in 'sort' column df = df.sort_values('sort')
Les exemples suivants montrent comment utiliser chaque méthode dans la pratique.
Exemple 1 : Trier par colonne de chaîne (lorsque la colonne ne contient que des caractères)
Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur les ventes de divers produits dans une épicerie :
import pandas as pd #create DataFrame df = pd.DataFrame({'product': ['Apples', 'Oranges', 'Bananas', 'Lettuce', 'Beans'], 'sales': [18, 22, 19, 14, 29]}) #view DataFrame print(df) product sales 0 Apples 18 1 Oranges 22 2 Bananas 19 3 Lettuce 14 4 Beans 29
Nous pouvons utiliser la syntaxe suivante pour trier les lignes du DataFrame en fonction des chaînes de la colonne produit :
#sort rows from A to Z based on string in 'product' column
df = df.sort_values('product')
#view updated DataFrame
print(df)
product sales
0 Apples 18
2 Bananas 19
4 Beans 29
3 Lettuce 14
1 Oranges 22
Notez que les lignes sont désormais triées de A à Z en fonction des chaînes de la colonne produit .
Si vous souhaitez plutôt trier de Z vers A, ajoutez simplement l’argument ascending=False :
#sort rows from Z to A based on string in 'product' column
df = df.sort_values('product', ascending=False)
#view updated DataFrame
print(df)
product sales
1 Oranges 22
3 Lettuce 14
4 Beans 29
2 Bananas 19
0 Apples 18
Notez que les lignes sont désormais triées de Z à A en fonction des chaînes de la colonne produit .
Exemple 2 : Trier par colonne de chaîne (lorsque la colonne contient des caractères et des chiffres)
Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur les ventes de divers produits dans une épicerie :
import pandas as pd #create DataFrame df = pd.DataFrame({'product': ['A3', 'A5', 'A22', 'A50', 'A2', 'A7', 'A9', 'A13'], 'sales': [18, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print(df) product sales 0 A3 18 1 A5 22 2 A22 19 3 A50 14 4 A2 14 5 A7 11 6 A9 20 7 A13 28
Notez que les chaînes de la colonne produit contiennent à la fois des caractères et des chiffres.
Si nous essayons de trier les lignes du DataFrame en utilisant les valeurs de la colonne produit , les chaînes ne seront pas triées dans le bon ordre en fonction des chiffres :
import pandas as pd #sort rows based on strings in 'product' column df = df.sort_values('product') #view updated DataFrame print(df) product sales 7 A13 28 4 A2 14 2 A22 19 0 A3 18 1 A5 22 3 A50 14 5 A7 11 6 A9 20
Au lieu de cela, nous devons créer une nouvelle colonne temporaire appelée sort qui contient uniquement les chiffres de la colonne produit, puis trier selon les valeurs de la colonne de tri , puis supprimer entièrement la colonne :
import pandas as pd #create new 'sort' column that contains digits from 'product' column df['sort'] = df['product'].str.extract('(\d+)', expand=False).astype(int) #sort rows based on digits in 'sort' column df = df.sort_values('sort') #drop 'sort' column df = df.drop('sort', axis=1) #view updated DataFrame print(df) product sales 4 A2 14 0 A3 18 1 A5 22 5 A7 11 6 A9 20 7 A13 28 2 A22 19 3 A50 14
Notez que les lignes sont désormais triées par chaînes dans la colonne produit et que les chiffres sont triés dans le bon ordre.
Remarque : Vous pouvez trouver la documentation complète de la fonction pandas sort_values() ici .
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :
Pandas : comment trier par date
Pandas : comment trier les colonnes par nom
Pandas : comment trier à la fois par index et par colonne