Pandas: como criar uma crosstab com porcentagens


Você pode usar o argumento normalize na função crosstab() do pandas para criar uma crosstab que exibe valores percentuais em vez de números:

 p.d. crosstab (df. col1 , df. col2 , normalize=' index ')

O argumento normalize aceita três argumentos diferentes:

  • all : mostra a porcentagem em relação a todos os valores.
  • índice : mostra a porcentagem como um total de valores de linha.
  • Colunas : Exibe a porcentagem como um total dos valores da coluna.

Os exemplos a seguir mostram como usar cada um desses métodos na prática com o seguinte DataFrame do pandas:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C '],
                   ' position ':['G', 'G', 'F', 'G', 'F', 'F', 'F', 'G', 'G', 'F', 'F'],
                   ' points ': [22, 25, 24, 39, 34, 20, 18, 17, 20, 19, 22]})

#view DataFrame
print (df)

   team position points
0 AG 22
1 AG 25
2 AF 24
3 BG 39
4 BF 34
5 BF 20
6 BF 18
7 GC 17
8 GC 20
9 CF 19
10 CF 22

Esta é a aparência da tabela cruzada padrão para o número de jogadores por equipe e posição:

 #create crosstab that displays count by team and position
p.d. crosstab (df. team , df. position )

position F G
team		
AT 12
B 3 1
C 2 2

Exemplo 1: Crie uma tabela cruzada com porcentagens relativas a todos os valores

Podemos usar a função crosstab() com o argumento normalize=all para criar uma crosstab que exibe as porcentagens de cada valor em relação ao número total de todos os valores:

 #create crosstab that displays counts as percentage relative to total count
p.d. crosstab (df. team , df. position , normalize=' all ')

position F G
team		
A 0.090909 0.181818
B 0.272727 0.090909
C 0.181818 0.181818

Veja como interpretar o resultado:

  • Os jogadores do time A na posição F representam 9,09% do total de jogadores.
  • Os jogadores do time A na posição G representam 18,18% do total de jogadores.

E assim por diante.

Exemplo 2: Criar uma tabela cruzada com porcentagens em relação aos totais de linhas

Podemos usar a função crosstab() com o argumento normalize=index para criar uma crosstab que exibe as porcentagens de cada valor em relação ao total da linha:

 #create crosstab that displays counts as percentage relative to row totals
p.d. crosstab (df. team , df. position , normalize=' index ')

position F G
team		
A 0.333333 0.666667
B 0.750000 0.250000
C 0.500000 0.500000

Veja como interpretar o resultado:

  • Os jogadores da posição F representam 33,33% do total de jogadores da equipe A.
  • Os jogadores na posição F representam 75% do total de jogadores da equipe B.
  • Os jogadores na posição F representam 50% do total de jogadores da equipe C.

E assim por diante.

Exemplo 3: Crie uma tabela cruzada com porcentagens em relação aos totais das colunas

Podemos usar a função crosstab() com o argumento normalize=columns para criar uma crosstab que exibe as porcentagens de cada valor em relação ao total da coluna:

 #create crosstab that displays counts as percentage relative to column totals
p.d. crosstab (df. team , df. position , normalize=' columns ')

position F G
team		
A 0.166667 0.4
B 0.500000 0.2
C 0.333333 0.4

Veja como interpretar o resultado:

  • Os jogadores do time A representam 16,67% do total de jogadores com posição F.
  • Os jogadores da equipe B representam 50% do total de jogadores com posição F.
  • Os jogadores da equipe C representam 33,33% do total de jogadores com posição F.

E assim por diante.

Nota : Você pode encontrar a documentação completa da função crosstab() do pandas aqui .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:

Pandas: como usar GroupBy e contagens de valores
Pandas: como usar GroupBy com contagem de bin
Pandas: Como contar valores em uma coluna com condição

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *