[Explicado] Como agrupar Dataframes em Python, Pandas, PySpark
Published on
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.
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
- 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.
- 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.
- 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.