Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Seria mais eficiente sempre usar "pivot_table" no lugar de "crosstab" ?

Boa tarde!

def dma(x):
  return (x - x.mean()).abs().mean()
renda_dispersao_por_sexo_e_cor = pd.crosstab(dados.Cor, dados.Sexo, values=dados.Renda.round(2), aggfunc={dma, 'var', 'std'})
renda_dispersao_por_sexo_e_cor.rename(index=cor, inplace=True)
renda_dispersao_por_sexo_e_cor.rename(columns=sexo, inplace=True)
renda_dispersao_por_sexo_e_cor

Econtrei essa solução para adicionar o desvio médio absoluto dentro do parâmetro aggfunc depois de apanhar um bocado. Durante a pesquisa descobri o método pivot_table, que aceita multiplas funções personalizadas diferentre do crosstab que aceita apenas uma. A minha dúvida é se não seria viável sempre usar o método pivot_table afim de evitar futuros problemas. Na substituição poderia haver efeitos colaterais nos dados que se deseja? O uso do método pivot_table seria mais eficiênte?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

Olá, Cleiton! Como vai?

O crosstab é quase um atalho elegante para frequências, proporções e alguns resumos estatísticos básicos. Já o pivot_table é o canivete suíço do pandas, ele aceita múltiplas métricas ao mesmo tempo, lida melhor com NaN e mantém uma estrutura mais flexível.

Tecnicamente, sempre dá para substituir um crosstab por um pivot_table equivalente. Mas respondendo aos pontos cruciais:

  • Efeitos colaterais: Poucos, mas existem. O crosstab já faz automaticamente a normalização de índices e colunas (ele transforma em categorias fixas), enquanto o pivot_table pode se comportar diferente se você não especificar margins, fill_value ou dropna. Ou seja, o risco é mais em detalhes de conveniência do que em distorções nos dados.

  • Eficiência: Para grandes datasets, a diferença é irrelevante, ambos chamam rotinas parecidas por baixo dos panos. A questão aqui não é performance, mas expressividade do código. O pivot_table é mais explícito, o que dá clareza e poder, mas o crosstab é mais conciso em situações simples.

Em suma:

O crosstab é ótimo para frequências e análises básicas, mas limitado. Já o pivot_table é mais flexível, aceita múltiplas funções e se adapta melhor a análises estatísticas. Substituir sempre por pivot_table é viável e não distorce os dados, só pode exigir ajustes em detalhes como dropna ou fill_value. O crosstab é rápido e leve, pivot_table é mais completo e poderoso.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado