Skip to content

Pandas Crosstab: Criar Tabelas de Cruzamento Simples em Python

Updated on

A tabulação cruzada é uma ferramenta poderosa na análise de dados, permitindo-nos inspecionar a relação entre duas ou mais variáveis categóricas ou discretas. Este artigo explorará o mundo do pandas crosstab, uma função na biblioteca pandas do Python que simplifica a criação de tabelas de cruzamento. Vamos explorar o que é o pandas crosstab, como ele se compara à função da tabela dinâmica e como usá-lo de forma eficaz para manipulação de dados.

O pandas é uma ferramenta popular de manipulação de dados em Python, oferecendo uma variedade de funções para análise de dados. Uma dessas funções é o crosstab, que permite uma fácil tabulação cruzada, fornecendo uma maneira simples e efetiva de entender as relações em seus dados. Seja você um analista de dados experiente ou um iniciante na área, entender como usar o pandas crosstab pode melhorar significativamente suas habilidades de manipulação de dados.

Quer criar rapidamente Visualização de Dados a partir de um Dataframe do Python Pandas sem 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 pandas (e dataframe polars) em uma interface de usuário semelhante ao Tableau para exploração visual.

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

O que é o Pandas Crosstab?

O crosstab do pandas é uma função que fornece uma maneira simples de criar uma tabela de cruzamento de dois (ou mais) fatores. Ele calcula uma tabulação cruzada simples de duas ou mais matrizes de dados. Por padrão, ele fornece uma tabela de frequência dos fatores, a menos que uma matriz de valores e uma função de agregação sejam passadas.

Aqui está um exemplo básico de como usar o crosstab do pandas:

import pandas as pd
 
## Dados de exemplo
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one', 'one'],
        'C': ['small', 'large', 'large', 'small', 'small', 'large'],
        'D': [1, 2, 2, 3, 3, 4]}
df = pd.DataFrame(data)
 
## Usar o crosstab
table = pd.crosstab(df['A'], df['B'])
print(table)

Neste exemplo, criamos um DataFrame a partir de um dicionário e, em seguida, usamos o crosstab do pandas para criar uma tabela de cruzamento que mostra a frequência das categorias 'B' para cada categoria 'A'.

Devo Usar Tabela Dinâmica ou Crosstab no Pandas?

Embora as tabelas dinâmicas e as tabulações cruzadas no pandas atendam a propósitos semelhantes, elas são usadas em cenários ligeiramente diferentes. A tabela dinâmica é uma solução mais geral, usada para criar uma nova tabela derivada a partir de uma tabela existente. Por outro lado, a tabulação cruzada é mais especializada para calcular frequências de grupo.

A tabela dinâmica pode lidar com vários tipos de dados de entrada e pode lidar com vários nomes de índice e coluna, enquanto a tabulação cruzada é principalmente usada para tabelas de frequência. Portanto, se você está procurando criar uma tabela de frequência, o crosstab do pandas é a melhor opção. No entanto, se você está lidando com tarefas de manipulação de dados mais complexas, uma tabela dinâmica pode ser uma escolha melhor.

Como Definir Crosstab no Python?

Definir uma tabulação cruzada em Python usando o pandas é simples. A sintaxe básica para criar uma tabulação cruzada é a seguinte:

pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name: str = 'All', dropna: bool = True, normalize=False)

Aqui está o que cada parâmetro significa:

  • index: semelhante a uma matriz, valores a serem agrupados nas linhas.
  • columns: semelhante a uma matriz, valores a serem agrupados nas colunas.
  • values: semelhante a uma matriz, opcional, matriz de valores a serem agregados de acordo com os fatores.
  • rownames: sequência, padrão None, se passado, deve corresponder ao número de matrizes de linha passadas.
  • colnames: sequência, padrão None, se passado, deve corresponder ao número de matrizes de coluna passadas.
  • aggfunc: função, opcional, se passado, exige que os values sejam especificados também.
  • margins: bool, padrão False, adicionar margens de linha/coluna (subtotais).
  • margins_name: str, padrão 'All', nome da linha/coluna que conterá os totais quando as margens estiverem True.
  • dropna: bool, padrão True, não incluir colunas cujas entradas sejam todas NaN.
  • normalize: bool, columns, ou 1, padrão False. Normalizar dividindo todos os valores pela soma dos valores.

Como Criar uma Tabulação Cruzada com Porcentagens no Pandas?

Criar uma tabulação cruzada com porcentagens no pandas é bastante simples. Basta definir o parâmetro normalize como True ou especificar o eixo (índice ou colunas) que você deseja normalizar. Aqui está um exemplo:

import pandas as pd
 
## Dados de exemplo
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one', 'one'],
        'C': ['small', 'large', 'large', 'small', 'small', 'large'],
        'D': [1, 2, 2, 3, 3, 4]}
df = pd.DataFrame(data)
 
## Usar crosstab com normalização
table = pd.crosstab(df['A'], df['B'], normalize=True)
print(table)

Neste exemplo, a tabulação cruzada mostrará a proporção de cada categoria em vez da contagem, fornecendo uma imagem mais clara da distribuição das categorias.

Quais são Algumas Formas Fáceis de Realizar uma Tabulação Cruzada no Pandas?

Existem várias maneiras de criar tabulações cruzadas no pandas, e o melhor método depende de suas necessidades específicas. Aqui estão três formas fáceis de criar tabulações cruzadas:

  1. Tabulação Cruzada Básica: A forma mais simples de criar uma tabulação cruzada é passar duas séries para a função crosstab do pandas, que fornecerá uma tabela de frequência.

  2. Crosstab com Agregação: Se você tiver uma terceira série de valores, pode passá-la para a função crosstab junto com uma função de agregação (como média, soma, etc.) para obter uma crosstab mais complexa.

  3. Crosstab com Normalização: Ao definir o parâmetro normalize como True, você pode criar uma crosstab que mostra a proporção de cada categoria, o que pode ser útil para entender a distribuição das categorias.

Exemplo de Crosstab no Pandas

Vamos analisar um exemplo prático de uso do crosstab do pandas. Suponha que temos um conjunto de dados de vendas de uma loja, incluindo o tipo de produto vendido, o vendedor responsável pela venda e o número de unidades vendidas. Queremos criar uma crosstab que mostre o total de unidades vendidas por cada vendedor para cada tipo de produto.

import pandas as pd
 
# Dados de exemplo
data = {'Produto': ['Maçãs', 'Laranjas', 'Bananas', 'Maçãs', 'Bananas', 'Bananas'],
        'Vendedor': ['João', 'João', 'Clara', 'Clara', 'João', 'Clara'],
        'Unidades': [5, 3, 8, 7, 2, 4]}
df = pd.DataFrame(data)
 
# Usar crosstab com agregação
tabela = pd.crosstab(df['Vendedor'], df['Produto'], values=df['Unidades'], aggfunc='sum')
print(tabela)

Neste exemplo, a crosstab mostra o total de unidades de cada tipo de produto vendido por cada vendedor. Esta é uma maneira poderosa de resumir e visualizar seus dados.

Como ordenar uma Crosstab no Pandas

Ordenar uma crosstab no pandas é tão simples quanto usar a função sort_values. Você pode ordenar por uma coluna específica ou pelo índice. Aqui está um exemplo:

# Continuando a partir do exemplo anterior
# Ordenar por 'Maçãs'
tabela = tabela.sort_values('Maçãs', ascending=False)
print(tabela)

Neste exemplo, a crosstab é ordenada pela coluna 'Maçãs' em ordem decrescente. Você pode facilmente alterar isso para ordenar por uma coluna diferente ou em ordem crescente.

Contagem e Porcentagem no Pandas Crosstab

Às vezes, você pode querer obter tanto a contagem quanto a porcentagem na sua crosstab. Isso pode ser alcançado criando duas crosstabs e concatenando-as. Veja como:

# Continuando a partir do primeiro exemplo
# Criar crosstab de contagem
tabela_contagem = pd.crosstab(df['Vendedor'], df['Produto'])
 
# Criar crosstab de porcentagem
tabela_porcentagem = pd.crosstab(df['Vendedor'], df['Produto'], normalize='index')
 
# Concatenar as duas tabelas
tabela_final = pd.concat([tabela_contagem, tabela_porcentagem], keys=['Contagem', 'Porcentagem'])
print(tabela_final)

Neste exemplo, a crosstab final mostra tanto a contagem quanto a porcentagem de cada categoria. Isso pode ser muito útil para obter uma visão abrangente dos seus dados.

Perguntas Frequentes

O que é o crosstab do pandas?

O crosstab do pandas é uma função da biblioteca pandas do Python que permite criar uma tabela cruzada de dois ou mais fatores. Ele fornece uma maneira simples e eficaz de entender as relações nos seus dados.

Como definir uma crosstab no Python?

Definir uma crosstab no Python usando o pandas é simples. A sintaxe básica para criar uma crosstab é pd.crosstab(index, columns), onde index e columns são os valores pelos quais agrupar nas linhas e colunas, respectivamente.

Como criar uma crosstab com porcentagens no pandas?

Para criar uma crosstab com porcentagens no pandas, você precisa definir o parâmetro normalize como True ou especificar o eixo (índice ou colunas) que deseja normalizar. Isso criará uma crosstab que mostra a proporção de cada categoria, fornecendo uma imagem mais clara da distribuição das categorias.