Como classificar um dataframe do pandas por data (com exemplos)
Freqüentemente, você pode querer classificar um DataFrame do pandas com base em uma coluna contendo datas. Felizmente, isso é fácil de fazer usando a função sort_values() .
Este tutorial mostra vários exemplos de uso prático desta função.
Exemplo 1: coluna Classificar por data
Suponha que temos o seguinte DataFrame do pandas:
import pandas as pd #createDataFrame 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
Primeiro, precisamos usar a função to_datetime() para converter a coluna ‘date’ em um objeto datetime:
df[' date '] = pd. to_datetime (df[' date '])
A seguir, podemos classificar o DataFrame com base na coluna ‘data’ usando a função 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
Por padrão, esta função classifica as datas em ordem crescente. No entanto, você pode especificar ascendente=Falso para classificar em ordem decrescente:
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
Exemplo 2: classificar por várias colunas de data
Suponha que temos o seguinte DataFrame do pandas:
import pandas as pd #createDataFrame 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
Podemos usar a função sort_values para classificar o DataFrame em múltiplas colunas, simplesmente fornecendo vários nomes de colunas para a função:
#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
O DataFrame agora é classificado em ordem crescente por data_pedido e, em seguida, em ordem crescente por data_recebimento.
Recursos adicionais
Como filtrar linhas do Pandas DataFrame por data
Como converter DateTime em data no Pandas
Como converter colunas para DateTime no Pandas
Como classificar por índice e coluna no Pandas