Как отсортировать кадр данных Pandas по дате (с примерами)


Часто вам может понадобиться отсортировать кадр данных pandas по столбцу, содержащему даты. К счастью, это легко сделать с помощью функции sort_values() .

В этом руководстве показано несколько примеров использования этой функции на практике.

Пример 1. Сортировка по столбцу даты

Предположим, у нас есть следующие Pandas DataFrame:

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

Во-первых, нам нужно использовать функцию to_datetime() для преобразования столбца «дата» в объект даты и времени:

df['date'] = pd.to_datetime(df['date'])

Затем мы можем отсортировать DataFrame на основе столбца «дата», используя функцию 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

По умолчанию эта функция сортирует даты по возрастанию. Однако вы можете указать по возрастанию = False , чтобы вместо этого сортировать по убыванию:

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

Пример 2. Сортировка по нескольким столбцам дат

Предположим, у нас есть следующие Pandas DataFrame:

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

Мы можем использовать функцию sort_values для сортировки DataFrame по нескольким столбцам, просто предоставив функции несколько имен столбцов:

#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

DataFrame теперь сортируется в порядке возрастания по order_date, а затем в порядке возрастания по Receive_date.

Дополнительные ресурсы

Как фильтровать строки Pandas DataFrame по дате
Как преобразовать дату и время в дату в pandas
Как преобразовать столбцы в DateTime в Pandas
Как сортировать по индексу и столбцу в Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.