3
respostas

ordenar uma coluna em ordem crescente e a coluna ao lado "siga" o novo index

Olá, Tenho uma coluna com datas que precisam estar em ordem crescente ou decrescente e também preciso que a coluna ao lado "siga" a nova ordem da coluna quando ela ficar em ordem crescente ou decrescente. Obs: Para contextualizar é uma ordenação do histórico das minhas compras na bolsa de valores e a coluna que eu quero que siga a nova ordem crescente ou decrescente das datas de compras é a colna do nome das ações.

3 respostas

Olá Bruno,

A função sort_values do pandas faz exatamente isso que você quer. O importante é que as datas estejam no formato correto:

import pandas as pd

df = pd.DataFrame({'Item': [1, 2, 3], 'Data': ['2015-02-02', '2016-12-03', '2015-12-08']})

# Converte as datas para Datetime
df['Data'] = pd.to_datetime(df['Data'])

# Ordena pela data e salva em um novo DataFrame
df_ordenado = df.sort_values(by='Data')

Resultado:

ItemData
012015-02-02
232015-12-08
122016-12-03

sim, porem o formato tem que ser o modelo americano, minha coluna é no formato Brasil. Outro problema é quando vou abrir a planilha no excel, o formato retorna ao modelo Brasil, Dia/Mês/Ano.

Então você tem a data como texto no formato dia/mês/ano?

Caso seu formato siga o modelo americano (mês/dia/ano) o código que eu mandei acima vai funcionar sem precisar de modificações.

Caso seu formato seja diferente, você pode definir um parâmetro no pd.to_datetime para adaptar o seu formato. Exemplo para o formato dia/mês/ano:

# Converte as datas para Datetime seguindo um formato definido
df['Data'] = pd.to_datetime(df['Data'], format='%d/%m/%Y')

Nesse link tem uma tabela com os formatos que você pode utilizar:

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes


Se o que você precisa é formatar a data após a ordenação, você pode utilizar a função strftime(), lembrando que após executar essa função sua coluna não vai ser mais do tipo datetime e sim string, exemplo:

# Formata para o padrão americano
df['Data'] = df['Data'].dt.strftime('%m/%d/%Y')

No caso do excel abrir assim, é porque ele já reconhece o campo como uma data e formata para o seu padrão, se for apenas para visualização você pode configurar o excel para deixar a coluna no formato americano na opção Formatar células...