Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre o método "sort_index"

Boa tarde, tudo bem? Eu peguei o código apresentando na questão e de fato o resultado foi igual a letra A, entretanto fiquei em dúvida sobre o método "sort_index".

Eu acreditava que com o "dist_freq_altura.sort_index(ascending = True, inplace = True)" as ordens apresentadas seriam diferentes, ou seja cresceriam de baixo para cima. Na minha concepção a ordem correta seria:

Estaturas Frequência Porcentagem (%) 2 - Média 36162 47.061426 1 - Baixa 20529 26.716554 3 - Alta 20149 26.222020

Vocês podem me explicar porque o "2 - Média" não ficou em cima, tendo em vista que ele apresenta a maior frequência??

1 resposta
solução!

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ênciaPorcentagem (%)
2 - Média3616247.0614
1 - Baixa2052926.7166
3 - Alta2014926.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ênciaPorcentagem (%)
3 - Alta2014926.222
1 - Baixa2052926.7166
2 - Média3616247.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ênciaPorcentagem (%)
2 - Média3616247.0614
1 - Baixa2052926.7166
3 - Alta2014926.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!