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