Skip to content

[Explicado] Como agrupar Dataframes em Python, Pandas, PySpark

Agrupar dados faz parte essencial da análise de dados, seja para calcular agregações ou aplicar transformações complexas. A função groupby do pandas em Python é uma ferramenta robusta e versátil que permite realizar essas operações de forma eficiente. Com sua ampla funcionalidade, ele simplifica o processo de manipulação de dados agrupados com base em determinadas condições, tornando a análise de dados uma tarefa muito mais fácil.

A função groupby do pandas é especialmente poderosa quando se trata de lidar com dataframes grandes, graças à sua implementação otimizada. Ao aproveitar o groupby do dataframe do pandas, você pode agrupar uma ou várias colunas, aplicar várias funções de agregação e até mesmo realizar tarefas avançadas, como filtrar e ordenar os dados agrupados. Este guia tem como objetivo desvendar o poder da função groupby do pandas, fornecendo insights, melhores práticas e exemplos práticos.

Quer criar rapidamente visualizações de dados a partir de Dataframes do Pandas usando nenhuma linha de código?

PyGWalker é uma biblioteca Python para Análise Exploratória de Dados com Visualização. PyGWalker (opens in a new tab) pode simplificar sua análise de dados e fluxo de trabalho de visualização de dados no Jupyter Notebook, transformando seu dataframe do pandas (e dataframe do polars) em uma interface de usuário no estilo Tableau para visualização.

PyGWalker para visualização de dados (opens in a new tab)

Compreendendo o GroupBy do Pandas

Em termos simples, a operação groupby do pandas envolve dividir os dados em grupos com base em determinados critérios, aplicar uma função a cada grupo e depois combinar os resultados. Esse processo também é conhecido como estratégia "split-apply-combine", um termo cunhado pela própria biblioteca pandas.

A função groupby do pandas usa um conceito semelhante ao da instrução SQL GROUP BY, facilitando a transição de SQL para Python na análise de dados.

Aqui está um exemplo básico de como você pode usar o groupby do dataframe do pandas:

import pandas as pd
 
## Criando um dataframe de exemplo
data = {
    'Nome': ['João', 'Ana', 'João', 'Ana', 'João', 'Ana'],
    'Assunto': ['Matemática', 'Matemática', 'Física', 'Física', 'Química', 'Química'],
    'Pontuação': [85, 90, 78, 88, 92, 95]
}
 
df = pd.DataFrame(data)
 
## Aplicando o groupby
agrupado = df.groupby('Nome')
for nome, grupo in agrupado:
    print("\n", nome)
    print(grupo)

Agrupando por Múltiplas Colunas

Além de agrupar por uma única coluna, o groupby do pandas também permite agrupar por várias colunas. Isso é especialmente útil quando você deseja categorizar seus dados com base em vários atributos. Vamos estender o exemplo anterior e realizar a operação de groupby em várias colunas:

## Aplicando o groupby em várias colunas
agrupado_multiplas = df.groupby(['Nome', 'Assunto'])
for (nome, assunto), grupo in agrupado_multiplas:
    print("\n", nome, assunto)
    print(grupo)

Como você pode ver, o groupby do dataframe do pandas agrupou os dados primeiro por 'Nome' e depois por 'Assunto' dentro de cada grupo 'Nome'. Esse tipo de agrupamento permite operações complexas de análise de dados.

Funções de Agregação com o GroupBy do Pandas

Um dos principais benefícios do groupby do pandas é que ele nos permite aplicar funções de agregação aos dados agrupados. As funções de agregação comuns incluem sum, mean, count, max e min. Vejamos um exemplo usando groupby e sum do pandas:

## Usando sum com groupby
agrupado_soma = df.groupby('Nome')['Pontuação'].sum()
print(agrupado_soma)

No exemplo, estamos somando as pontuações de cada aluno. Observe que usamos o indexador de colunas (['Pontuação']) logo após o groupby. Isso ocorre porque a função sum só pode ser aplicada a dados numéricos. Portanto, precisamos selecionar a coluna 'Pontuação' para aplicar a função sum.

Ordenando os Dados com o GroupBy do Pandas

É comum ordenar os dados após a operação de groupby. Por exemplo, você pode querer ordenar os grupos com base em seus valores agregados. Veja como você pode usar sort_values com o groupby do pandas:

## Ordenando os dados após o groupby
agrupado_ordenado = df.groupby('Nome')['Pontuação'].sum().sort_values(ascending=False)
print(agrupado_ordenado)

No exemplo, primeiro agrupamos o dataframe por 'Nome', em seguida, somamos as pontuações para cada grupo e, finalmente, ordenamos os grupos pela soma das pontuações em ordem decrescente.

Agregação Personalizada com Apply do GroupBy

O groupby do pandas permite a agregação personalizada usando a função apply. Isso pode ser útil quando as funções de agregação integradas não são suficientes. Por exemplo, suponha que você queira calcular a amplitude (máximo - mínimo) das pontuações para cada aluno. Você pode usar apply do groupby do pandas da seguinte forma:

## Agregação personalizada com apply do groupby
agrupado_apply = df.groupby('Nome')['Pontuação'].apply(lambda x: x.max() - x.min())
print(agrupado_apply)

Neste exemplo, para cada grupo, calculamos a amplitude da 'Pontuação' usando uma função lambda e aplicamos essa função a cada grupo com apply.

Diferença entre GroupBy e Pivot no Pandas

Tanto o groupby do pandas quanto a tabela dinâmica (pivot table) são ferramentas poderosas para sumarização de dados, mas cada uma tem diferentes finalidades e é usada em contextos diferentes. Para ilustrar, o groupby do pandas é usado quando você deseja resumir seus dados com base em alguma categoria, enquanto a tabela dinâmica é usada para remodelar seus dados.

Em uma operação de groupby, você especifica uma ou mais colunas para agrupar e, em seguida, especifica uma função de agregação para aplicar a cada grupo. Por outro lado, uma tabela dinâmica recebe como entrada dados simples em coluna e agrupa as entradas em uma tabela bidimensional que fornece uma análise multidimensional.

GroupBy com Dados Não Numéricos no Pandas

É possível, sim, usar groupby com dados não numéricos no pandas. Embora funções de agregação como sum e mean não possam ser aplicadas a dados não numéricos, há muitas operações que podem ser realizadas com dados não numéricos. Por exemplo, você pode contar o número de ocorrências de cada categoria ou aplicar qualquer função que faça sentido com o tipo de dados da coluna não numérica.

## Groupby em dados não numéricos e contagem
agrupado_contagem = df.groupby('Nome')['Assunto'].count()
print(agrupado_contagem)

Neste exemplo, estamos contando o número de disciplinas que cada aluno tem, agrupando pelo 'Nome' e contando o 'Assunto'.

GroupBy com PySpark

O conceito de groupby também se estende a frameworks de big data como o PySpark. Embora a sintaxe seja um pouco diferente, a ideia permanece a mesma: dividir os dados em grupos e aplicar alguma função a cada grupo.

## GroupBy no PySpark
from pyspark.sql import SparkSession
 
spark = SparkSession.builder.getOrCreate()
 
## Carregar dados para o PySpark DataFrame
df_pyspark = spark.createDataFrame(df)
 
## GroupBy no PySpark
df_pyspark.groupby('Nome').agg({'Pontuação': 'sum'}).show()

No PySpark, você precisa usar a função agg para aplicar uma função de agregação após o agrupamento. No exemplo acima, estamos agrupando por 'Nome' e somando a 'Pontuação' para cada grupo.

À medida que você se aprofunda no mundo da análise de dados com Python, descobrirá que o groupby do pandas é um companheiro confiável. Com sua flexibilidade e poder, você pode lidar e explorar os dados de maneiras que antes só estavam disponíveis para aqueles com conhecimento em programação ou estatística. Portanto, mergulhe, experimente as diferentes funcionalidades e veja seus dados fornecerem insights valiosos!

FAQs

  1. Qual é a diferença entre groupby e pivot no Pandas?

O groupby do pandas é usado para resumir dados com base em uma categoria, enquanto a tabela dinâmica é usada para reformular dados em uma tabela bidimensional para análise multidimensional.

  1. Posso usar groupby com dados não numéricos no Pandas?

Sim, você pode usar groupby com dados não numéricos no Pandas. Embora não seja possível aplicar funções de agregação como sum ou mean a dados não numéricos, há muitas operações que você pode realizar, como contar o número de ocorrências de cada categoria.

  1. Como uso groupby com o PySpark?

O conceito de groupby é semelhante no PySpark e no Pandas. Depois de agrupar, você precisa usar a função agg no PySpark para aplicar uma função de agregação a cada grupo.