Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

O uso do parâmetro axis

Olá pessoal,

A analisando a questão, entendi que seria necessário fazer a inversão do index do DataFrame utilização do parâmetro axis para fazer o sort das coluas por meio do método sort_values. Neste caso a resposta não seria df_B = df_A.sort_values(by = ['Sexo', 'Nome'], axis = 1) ?Fiquei com essa dúvida.

Abraços

3 respostas

Boas Osvlado! Tudo bem? Espero que sim.

Não compreendi muito bem o que você quis dizer com inversão de do index.

Mas nesse caso, como o que estamos ordenando são as linhas a partir do valor das colunas, não é necessário passar o parâmetro axis=1, inclusive, se esse parâmetro é passado o programa retorna um erro.

Ocorre só vamos usar esse parâmetro axis=1 quando quisermos mudar a ordem das colunas dess DataFrame, que não é o caso.

Diante do que foi pedido, que é fazer a ordenação por Nome e Sexo, a resposta mais correta é a indicada pela questão:

df_B = dados.sort_values(by = ['Nome', 'Sexo'])

Que retorna:

NomeSexoIdade
5AnaF42
0AryM21
3BetoM29
4BrunaF31
2CarlosM50
1CátiaF19
solução!

Olá Osvaldo, tudo bem? Espero que sim!

Complementando a resposta do Pedro acima:

O método sort_values() pode trazer certa confusão com o parâmetro axis, isso porque ao utilizar o argumento padrão 0, que é utilizado para a resposta correta do exercício, estamos ordenando as linhas do DataFrame, seja em ordem crescente ou decrescente, porém passamos alguma coluna no parâmetro by para sabermos qual coluna iremos observar ao ordenar as linhas do nosso DataFrame.

Vamos visualizar através do exemplo do exercício. Temos inicialmente o nosso conjunto de dados:

NomeSexoIdade
0AryM21
1CatiaF19
2CarlosM50
3BetoM29
4BrunaF31
5AnaF42

Queremos ordenar as linhas em ordem crescente, primeiro levando em consideração a coluna Sexo e depois a coluna Nome. Ao aplicarmos o código:

df_B = df_A.sort_values(by = ['Sexo', 'Nome'])

Obtemos como resultado a tabela:

NomeSexoIdade
5AnaF42
4BrunaF31
1CatiaF19
0AryM21
3BetoM29
2CarlosM50

Caso utilizassemos o valor 1 para o parâmetro axis, estaríamos ordenando as colunas do nosso DataFrame, permanecendo intactos a ordem das linhas. Repare que ao fazer a transformação acima, o index ficou desorganizado, uma vez que os dados mudaram sua ordenação.

Vou utilizar outra tabela aqui para mostrar o caso do axis = 1 para ficar mais claro, uma vez que a tabela do exercício ficaria confusa para analisar.

Seja o conjunto de dados df_C, criado através do código:

df_C = pd.DataFrame({'Coluna 1':['A','C','B'],'Coluna 2':['B','A','C'],'Coluna 3':['C','B','A']})
Coluna 1Coluna 2Coluna 3
0ABC
1CAB
2BCA

Quero ordenar as colunas com base em alguma das linhas, digamos a segunda linha. Vou mudar o nome dos índices para ficar ainda mais claro:

df_C.index = ['Linha 1', 'Linha 2', 'Linha 3']

Ao realizar o código acima, obtemos:

Coluna 1Coluna 2Coluna 3
Linha 1ABC
Linha 2CAB
Linha 3BCA

Vamos ordenar as colunas através da Linha 2.

df_C.sort_values(by = 'Linha 2', axis = 1)
Coluna 2Coluna 3Coluna 1
Linha 1BCA
Linha 2ABC
Linha 3CAB

Repare que a ordenação das linhas se manteve a mesma, porém as colunas foram ordenadas com base na ordem crescente dos dados da Linha 2, que agora apresenta A -> B -> C e anteriormente estava C -> A -> B.

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá pessoal!

Valeu pela explicação! Obrigado!