Boas Paulo!
Tudo bem?
Sua observação é bastante importante. Creio que para resolver essa dúvida, é importante revisitar os métodos sort_index()
e sort_values()
.
No caso da questão, foi usado o sort_index()
, que faz a ordenação a partir dos índices, nesse caso, das estaturas.
Portanto, a ordenação é por Estatura e não pela frequencia ou porcentagem.
Caso deseje realizar a ordenação pela frequência, deve-se usar a função sort_values()
.
Primeiro, vamos separar a parte de construção da tabela de frequencias da ordenação:
classes = [dados.Altura.min(), 1.65, 1.75, dados.Altura.max()]
labels = ['1 - Baixa', '2 - Média', '3 - Alta']
frequencia = pd.value_counts(
pd.cut(
x = dados.Altura,
bins = classes,
labels = labels,
include_lowest = True
)
)
percentual = pd.value_counts(
pd.cut(
x = dados.Altura,
bins = classes,
labels = labels,
include_lowest = True
), normalize = True
) * 100
dist_freq_altura = pd.DataFrame(
{'Frequência': frequencia, 'Porcentagem (%)': percentual}
)
dist_freq_altura.rename_axis('Estaturas', axis= 'columns', inplace = True)
Que resulta em:
| Frequência | Porcentagem (%) |
---|
2 - Média | 36162 | 47.0614 |
1 - Baixa | 20529 | 26.7166 |
3 - Alta | 20149 | 26.222 |
Agora, vamos realizar a ordenação por frequência, usando a sort_values()
:
dist_freq_altura.sort_values(by='Frequência', ascending = True, inplace = True)
Que resulta em:
| Frequência | Porcentagem (%) |
---|
3 - Alta | 20149 | 26.222 |
1 - Baixa | 20529 | 26.7166 |
2 - Média | 36162 | 47.0614 |
A ordem é essa pois passamos o parâmetro `ascending=True`. Caso queira de forma decrescente, basta passar este parâmetro como `ascending=False`, resultando em:
| Frequência | Porcentagem (%) |
---|
2 - Média | 36162 | 47.0614 |
1 - Baixa | 20529 | 26.7166 |
3 - Alta | 20149 | 26.222 |
Em suma, creio que houve uma confusão entre sort_index()
e sort_values()
. Sendo a primeira usada para ordenar a partir dos ídices e a segunda, a partir de uma determinada coluna.
Espero ter ajudado!
Bons Estudos!