Olá, Tiago, tudo bem?
Na verdade, o que você está querendo fazer é despivotar uma tabela, ou seja, transformá-la de uma versão ampla (espalhando os dados em relação as colunas) para uma versão comprida (espalhando em relação as linhas).
Nesse caso, usamos o método melt()
, matendo as colunas Uf, IBGE, CNES e adicionando as colunas com os valores divididos em relação a cada ano (valor e ano).
O método melt()
é útil quando queremos moldar nosso DataFrame onde uma ou mais colunas são variáveis identificadoras (id_vars
, no nosso caso as colunas Uf, IBGE, CNES), enquanto que outras são consideradas as variáveis medidas (value_vars
, no nosso caso as colunas que sobraram 2020 e 2021). Essas duas últimas serão "despivotadas" para as linhas deixando duas colunas chamadas aqui de variable
(valor) e value
(ano).
Obs.: Antes de utilizar esse método, precisamos resetar o index para que o valor de Uf também seja levado em consideração na nossa análise.
Assim, o código para despivotar essa tabela seria:
# Resetando o index para fazer o Uf ser considerado um id_vars no melt
df.reset_index(inplace=True)
# Fazendo o melt da tabela, as colunas 2020 e 2021 são escolhidas para serem despivotadas
df = df.melt(id_vars = ['Uf', 'IBGE', 'CNES'], value_vars = ['2020', '2021'], var_name='valor', value_name='ano')
#Organizando a tabela para o valor vir antes do ano em questão
df = df[['Uf', 'IBGE', 'CNES', 'valor', 'ano']]
df
Deixando a saída da seguinte forma:
| Uf | IBGE | CNES | valor | ano |
---|
0 | ES | 320120 | 2547678 | 2747 | 2020 |
1 | ES | 320120 | 2485656 | 1817 | 2020 |
2 | ES | 320120 | 3125416 | 2965 | 2020 |
3 | ES | 320120 | 2547678 | 2916 | 2021 |
4 | ES | 320120 | 2485656 | 2071 | 2021 |
5 | ES | 320120 | 3125416 | 3156 | 2021 |
Espero que tenha respondido a sua dúvida :)
Qualquer dúvida é só chamar!
Abraços e bons estudos!