3
respostas

[Dúvida] Dúvida aula - (Extra) Contadores

Pessoal, baseado nesta mesma apresentação da aula me surgiu uma dúvida simples, que voltei alguns vídeos do curso para saber se não passou batido da minha atenção e não encontrei nada relacionado. Baseado nestes mesmo dados: Apartamento - 16923 Casa de Condominio - 964 Casa - 898 Quitinete - 813 Casa de Vila - 233

Qual a forma mais elegante de fazer um Dataframe com a quantidade e o Percentual de cada Tipo em relação ao total? Eu tentei fazer .sum['Tipo'] / Tipo.value_counts() mas acredito que não seria esta a sintaxe. Apesar da dúvida parecer simples eu realmente não sei como fazer essa operação simples com o notebook. Resultado esperado seria:

Tipo Quantidade Percentual

Apartamento 16923 85%

Casa de Condominio 964 5%

Casa 898 5%

Quitinete 813 4%

Casa de Vila 233 1%

3 respostas

Olá, Rafael! Tudo bom?

Ótima pergunta. O que você busca é o que chamaríamos de uma tabela de frequência relativa, e a equação para achar os valores é compará-lo com base no total, os valores dividido pela soma.

Mas o pd.DataFrame.value_counts() tem um parâmetro bem legal, chamado normalize, que por padrão vem com o valor False, mas ao ser setado como True, retorna os percentuais de cada dado.

Então é só utilizar:

tipo.value_counts(normalize=True)

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

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

Olá, tem certeza que essa é a resposta correta? Eu entendi que ele quer saber o percentual de cada linha em relação ao todo. Eu tentei fazer dessa forma, e foi criada uma nova series no df nomeada como "0", e, em todas linhas, sempre o mesmo valor.

teto.value_counts(normalize=True)
.

Sim, Rogério.

A dúvida dele é como montar uma tabela de frequência relativa, uma contagem de valores sobre o todo, separando pelos rótulos de cada classe. Para isso, basta seguir as intruções da aula de Contadores (Extra) e apenas adicionar o parâmetro normalize=True no value_counts(), como maneira de "reduzir" o código.

import pandas as pd

dados = pd.read_csv('dados/aluguel.csv', sep = ';')
dados.Tipo.value_counts()

Saída:

Apartamento           16923
Casa de Condomínio      964
Casa                    898
Quitinete               813
Casa de Vila            233
Name: Tipo, dtype: int64

Utilizando o parâmetro normalize=True no value_counts().

dados.Tipo.value_counts(normalize=True)

Saída:

Apartamento           0.853361
Casa de Condomínio    0.048611
Casa                  0.045283
Quitinete             0.040996
Casa de Vila          0.011749
Name: Tipo, dtype: float64

E como é uma Series, para transformar em percentual, basta multiplicar por 100.

dados.Tipo.value_counts(normalize=True) * 100

Saída:

Apartamento           85.336090
Casa de Condomínio     4.861076
Casa                   4.528264
Quitinete              4.099642
Casa de Vila           1.174928
Name: Tipo, dtype: float64