Olá, Juliana, tudo bem?
Gostei bastante da sua pergunta, ela é bem interessante.
Então, existem algumas formas de fazer essa relação seja ela usando apenas o describe()
(1ª solução) ou dentro do aggregate()
(2ª e 3ª solução). Logo abaixo, descrevemos três soluções possíveis de conseguir tal funcionalidade
1ª Solução: Usando apenas o describe()
Usando apenas o describe()
podemos selecionar as colunas que desejamos apresentar na tela. Seguindo o exemplo da aula em que o professor agrupava os bairros pelo Valor, o código dessa abordagem seria o seguinte:
# Solução 1 - Sem usar o aggregate e escolhendo as colunas desejadas do describe
grupo_bairro['Valor'].describe()[['count', 'mean', '50%']]
Saída:
| count | mean | 50% |
---|
Bairro | | | |
---|
Barra da Tijuca | 3863.0 | 7069.552938 | 4500.0 |
---|
Botafogo | 873.0 | 8791.828179 | 3000.0 |
---|
Copacabana | 2644.0 | 4126.677005 | 3000.0 |
---|
Flamengo | 714.0 | 4113.526611 | 2900.0 |
---|
Ipanema | 1764.0 | 9352.001134 | 7000.0 |
---|
Leblon | 1258.0 | 8746.344992 | 7000.0 |
---|
Tijuca | 1100.0 | 2043.520000 | 1800.0 |
---|
2ª Solução: Usando o aggregate() unido ao describe()
Outra solução para esta funcionalidade é passando o describe como um parâmetro doaggregate()
, assim, é possível selecionar dentro das colunas existentes do describe quais serão as escolhidas para exibição. Continuando no exemplo da aula em que o professor agrupava os bairros pelo Valor, o código dessa abordagem apresentaria a seguinte forma:
# Solução 2 - Usando o aggregate unido ao describe e escolhendo as colunas desejadas
grupo_bairro['Valor'].aggregate('describe')[['count', 'mean', '50%']]
Saída:
Igual à 1 ª solução
3ª Solução: Usando a estatística descritiva do numpy junto ao aggregate()
Essa abordagem, apesar de necessitar da importação da biblioteca numpy, nos permite não só usar os valores da estatística descritiva presente no describe()
, como também diversas outras que tivermos interesse em agregar ao nosso código (como por exemplo, os percentis e decis). Para tal, precisamos definir as funções que vão chamar o método que queremos adotar e exibir em nossa tabela. Logo abaixo, descrevemos dois exemplos de utilização dessa solução de acordo com o exemplo da aula em que o professor agrupava os bairros pelo Valor:
# Solução 3 - Importando numpy e definindo os percentuais desejados para a função aggregate
import numpy as np
# Exemplo 1 - Descrevendo a função do 1º quartil
def primeiro_quartil (x):
# Calcula o primeiro quartil de nossos dados (25%)
# Para mudar para percentil ou decil usar: np.percentile(x, q= numero_entre_0_e_100)
return np.quantile(x, q=.25)
grupo_bairro['Valor'].aggregate(['count', 'mean', primeiro_quartil]).rename(columns = {'primeiro_quartil': '25%'})
Saída:
| count | mean | 25% |
---|
Bairro | | | |
---|
Barra da Tijuca | 3863 | 7069.552938 | 2500.0 |
---|
Botafogo | 873 | 8791.828179 | 2200.0 |
---|
Copacabana | 2644 | 4126.677005 | 2000.0 |
---|
Flamengo | 714 | 4113.526611 | 1900.0 |
---|
Ipanema | 1764 | 9352.001134 | 4500.0 |
---|
Leblon | 1258 | 8746.344992 | 4500.0 |
---|
Tijuca | 1100 | 2043.520000 | 1500.0 |
---|
Extra: Calculando mediana, 2º quartil ou 50%
# Solução 3 - Importando numpy e definindo a mediana direto no aggregate
import numpy as np
grupo_bairro['Valor'].aggregate(['count', 'mean', np.median]).rename(columns = {'median': '50%'})
Saída:
Igual à 1 ª solução
Espero que tenhamos ajudado a compreender um pouco mais sobre esse assunto.
Abraços e bons estudos!