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!