Comment trier un DataFrame Pandas par date (avec exemples)
Souvent, vous souhaiterez peut-être trier un DataFrame pandas en fonction d’une colonne contenant des dates. Heureusement, cela est facile à faire en utilisant la fonction sort_values() .
Ce tutoriel montre plusieurs exemples d’utilisation pratique de cette fonction.
Exemple 1 : Trier par colonne de date
Supposons que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'sales': [4, 11, 13, 9], 'customers': [2, 6, 9, 7], 'date': ['2020-01-25', '2020-01-18', '2020-01-22', '2020-01-21']}) #view DataFrame print(df) sales customers date 0 4 2 2020-01-25 1 11 6 2020-01-18 2 13 9 2020-01-22 3 9 7 2020-01-21
Tout d’abord, nous devons utiliser la fonction to_datetime() pour convertir la colonne ‘date’ en un objet datetime :
df['date'] = pd.to_datetime(df['date'])
Ensuite, nous pouvons trier le DataFrame en fonction de la colonne ‘date’ à l’aide de la fonction sort_values() :
df.sort_values(by='date') sales customers date 1 11 6 2020-01-18 3 9 7 2020-01-21 2 13 9 2020-01-22 0 4 2 2020-01-25
Par défaut, cette fonction trie les dates par ordre croissant. Cependant, vous pouvez spécifier ascending=False pour trier par ordre décroissant :
df.sort_values(by='date', ascending=False) sales customers date 0 4 2 2020-01-25 2 13 9 2020-01-22 3 9 7 2020-01-21 1 11 6 2020-01-18
Exemple 2 : trier par plusieurs colonnes de dates
Supposons que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'person': ['A', 'B', 'C', 'D'], 'order_date': ['2020-01-15', '2020-01-15', '2020-01-20', '2020-01-20'], 'receive_date': ['2020-01-25', '2020-01-18', '2020-01-22', '2020-01-21']}) #view DataFrame print(df) person order_date receive_date 0 A 2020-01-15 2020-01-25 1 B 2020-01-15 2020-01-18 2 C 2020-01-20 2020-01-22 3 D 2020-01-20 2020-01-21
Nous pouvons utiliser la fonction sort_values pour trier le DataFrame sur plusieurs colonnes en fournissant simplement plusieurs noms de colonnes à la fonction :
#convert both date columns to datetime objects df[['order_date','receive_date']] = df[['order_date','receive_date']].apply(pd.to_datetime) #sort DateFrame by order_date, then by receive_date df.sort_values(by=['order_date', 'receive_date']) person order_date receive_date 1 B 2020-01-15 2020-01-18 0 A 2020-01-15 2020-01-25 3 D 2020-01-20 2020-01-21 2 C 2020-01-20 2020-01-22
Le DataFrame est désormais trié par ordre croissant par order_date, puis par ordre croissant par réception_date.
Ressources additionnelles
Comment filtrer les lignes Pandas DataFrame par date
Comment convertir DateHeure en date dans Pandas
Comment convertir des colonnes en DateTime dans Pandas
Comment trier à la fois par index et par colonne dans Pandas