Часто вам может понадобиться отсортировать кадр данных 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