Desbravando o Pandas - Parte 7 - Agrupamento e ordenação
Como agrupar e/ou ordenar DataFrames baseando-se em atributos.
Neste documento continuaremos explorarando os conceitos iniciais da biblioteca Pandas. Para acompanhamento utilizaremos a mesma base do 🔗Desbravando o Pandas - Parte 1 - Estrutura de dados e seguirei com as mesmas estruturas criadas previamente.
Agrupamento e ordenação
No pandas, os métodos groupby()
e sort_values()
são operações fundamentais para organizar e extrair informações. Assim como no SQL as operações de GROUP BY
e ORDER BY
estão entre as mais utilizadas.
Agrupamento
.groupby()
O agrupamento no Pandas é realizado com o método groupby()
, que permite segmentar um conjunto de dados com base em uma ou mais colunas. Essa técnica é útil para resumir informações, como calcular médias, somas, contagens e outras estatísticas por categoria. Por exemplo, em um conjunto de dados de vendas, podemos agrupar por categoria de produto e calcular o total vendido para cada uma.
O agrupamento acontece pelo método groupby()
e ele é semelhante ao GROUP BY do SQL.
Funções podem então ser aplicadas para os elementos de cada grupo, de modo que os resultados de cada grupo são combinados.
1
2
3
df_grupo = df_data.groupby('Região')
df_grupo
Objeto de agrupamento criado
df_grupo
O groupby não retorna um novo DataFrame, mas sim um objeto de agrupamento, que pode ser processado posteriormente com funções como sum()
, mean()
, count()
, entre outras. Esse método é muito útil para agregar dados e identificar padrões em grandes conjuntos de informações.
1
df_grupo.groups
Retorno do dicionário gerado utilizando o atributo
groups
no agrupamento df_grupo
O atributo groups
retorna um dicionário do objeto groupby()
. Este contém o Index para cada valor do agrupamento. Da seguinte forma:
- As chaves são os valores únicos das colunas usadas para agrupar (Neste exemplo a coluna Região).
- Os valores são listas com os índices das linhas correspondentes a cada grupo.
1
df_grupo.indices
Retorno do dicionário gerado utilizando o atributo
indices
no agrupamento df_grupo
O atributo indices
de um objeto groupby()
retorna um dicionário, assim como groups
, mas com uma diferença:
- As chaves são os valores únicos das colunas usadas para agrupar (Neste exemplo a coluna Região).
- Os valores são arrays NumPy contendo os índices das linhas correspondentes a cada grupo.
Se quisermos no nosso tratamento retornar apenas um valor do grupo utilizado, podemos fazer o seguinte:
Supondo que nosso objetivo seja o agrupamento Região mas apenas o valor Centro Oeste (CO).
1
2
## Retornando um DataFrame contendo o grupo do agrupamento utilizando 'CO'
df_grupo.get_group('CO')
Retorno do DataFrame utilizando o método
get_group()
pegando a ‘Região’ de ‘CO’ (Centro Oeste)
Também é possível utilizar a operação de análise descritiva (Mostrados na parte 5) utilizando também describe()
e todos atributos individuais.
1
df_grupo.describe()
Retorno do DataFrame utilizando o método
describe()
no agrupamento df_grupo
Podemos também agrupar por mais de uma coluna, utilizando o próprio groupby()
podemos por exemplo:
Qual a média das avaliações das reclamações pra cada Região e Como Comprou Contratou?
1
2
3
4
5
## Agrupa primeiro por 'Região'
## Agrupa segundo por 'Como comprou Contratou'
df_media_regiao = df_data.groupby(['Região','Como Comprou Contratou'])
## Utilizando a função agregadora de média
df_media_regiao['Nota do Consumidor'].mean()
Retorno do agrupamento
df_media_regiao
utilizando duas colunas ‘Região’ e ‘Como Comprou Contratou’ e a média das nótas dos consumidores
.agg()
O método agg()
permite aplicar múltiplas funções de agregação em colunas específicas de um DataFrame ou Series. Ele é muito útil quando queremos aplicar diferentes funções agregadoras a diferentes colunas ao mesmo tempo.
Por exemplo, tendo o seguinte DataFrame:
1
2
3
4
5
6
7
df = pd.DataFrame([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[None, None, None]],
columns=['A','B','C'])
df
Retorno do DataFrame criado
df
Podemos aplicar diferentes operações, da seguinte forma:
1
df.agg([sum, min]) ## Ignora o NaN
Retorno das funções de agregações
sum
e min
Podemos também utilizar juntamente com a operação groupby()
1
df_grupo['Nota do Consumidor'].agg([min,max])
Retorno das funções de agregações
min
e max
com o agrupamento df_grupo
e o método agg()
Ordenação
A ordenação no Pandas é feita com o método sort_values()
, que organiza as linhas de um DataFrame com base nos valores de uma ou mais colunas. Podemos ordenar de forma crescente ou decrescente, dependendo da necessidade da análise.
A função básica é : df.sort_values(by="coluna", ascending=True|False)
- ascending=True → Define a ordem crescente.
- ascending=False → Define a ordem decrescente.
1
2
3
4
5
6
7
df_rh = pd.DataFrame({
"Nome": ["Lucas", "Ana", "Pedro", "Mariana"],
"Idade": [30, 25, 40, 35],
"Salario": [4000, 7000, 4000, 8000]
})
df_rh
Como ordenar o DataFrame df_rh
pelo salário?
- Do Menor Salário → Maior Salário:
1
2
## Crescente
df_rh.sort_values(by='Salario', ascending=True)
DataFrame
df_rh
ordenado em ordem crescente Menor Salário → Maior Salário
- Do Maior Salário → Menor Salário:
1
2
## Decrescente
df_rh.sort_values(by='Salario', ascending=False)
DataFrame
df_rh
ordenado em ordem decrescente Maior Salário → Menor Salário
Podemos aplicar o método sort_values()
por mais de uma coluna.
Se quisermos ordenar de forma Crescente o valor do Salário e de forma Descrescente a idade. Podemos seguir o seguinte exemplo
1
2
3
## Ordenando o Salário de forma crescente (Menor → Maior)
## Ordenando a Idade de forma decrescente (Maior → Menor)
df_rh.sort_values(by=['Salario','Idade'], ascending=[True,False])
DataFrame
df_rh
ordenado em ordem crescente Menor Salário → Maior Salário pelo Salário e em ordem decrescente Maior Idade → Menor Idade
Note que o DataFrame original não foi alterado:
DataFrame
df_rh
não foi alterado
Para alterar o DataFrame original
df_rh
é necessário o comandoinplace=True
.
Uma abordagem comum é agrupar os dados e, em seguida, ordená-los com base nos valores agregados. Por exemplo, ao analisar um conjunto de dados de vendas, podemos primeiro agrupar por região e calcular o faturamento total, depois ordenar do maior para o menor, destacando as regiões com melhor desempenho.
Esses dois métodos são fundamentais para transformar grandes volumes de dados, permitindo análises mais detalhadas e decisões mais informadas
Para download do notebook utilizado, acesse o 🔗Link