Pandas: como criar uma tabela dinâmica com porcentagens


Você pode usar a seguinte sintaxe para adicionar uma coluna a uma tabela dinâmica no pandas que exibe a porcentagem do total de uma coluna específica:

 my_table[' % points '] = (my_table[' points ']/my_table[' points ']. sum ())* 100

Esta sintaxe específica adiciona uma nova coluna chamada % pontos a uma tabela dinâmica chamada my_table que exibe a porcentagem do total de valores na coluna de pontos .

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: Crie uma tabela dinâmica do Pandas com porcentagens

Suponha que temos o seguinte DataFrame do pandas que mostra o número de pontos marcados por diferentes jogadores de basquete:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['Guard', 'Guard', 'Forward', 'Forward',
                                'Guard', 'Guard', 'Forward', 'Forward'],
                   ' points ': [22, 30, 14, 15, 19, 30, 23, 20]})

#view DataFrame
print (df)

  team position points
0 A Guard 22
1A Guard 30
2 A Forward 14
3 A Forward 15
4 B Guard 19
5 B Guard 30
6 B Forward 23
7 B Forward 20

Podemos usar a função pivot_table() para criar uma tabela dinâmica que mostra a soma dos pontos por equipe e posição:

 #create pivot table to calculate sum of points by team and position
my_table = pd. pivot_table (df, index=[' team ', ' position '], aggfunc=' sum ')

#view pivot table
print (my_table)

               points
team position        
A Forward 29
     Guard 52
B Forward 43
     Guard 49

Pelo resultado podemos ver:

  • Os atacantes do Time A marcaram um total de 29 pontos.
  • Os guardas do Time A marcaram um total de 52 pontos.
  • Os atacantes do Time B marcaram um total de 43 pontos.
  • Os guardas do Time B marcaram um total de 49 pontos.

Podemos então usar a seguinte sintaxe para adicionar uma nova coluna chamada % pontos que exibe a porcentagem do total de pontos para cada linha:

 #add column that displays points as a percentage of total points
my_table[' % points '] = (my_table[' points ']/my_table[' points ']. sum ())* 100

#view updated pivot table
print (my_table)

               points % points
team position                   
A Forward 29 16.763006
     Guard 52 30.057803
B Forward 43 24.855491
     Guard 49 28.323699

A nova coluna % de pontos agora exibe os valores dos pontos como uma porcentagem do total de pontos.

Observe também que você pode usar a função round() para arredondar valores percentuais para um determinado número de casas decimais.

 #add column that displays points as a percentage of total points (rounded)
my_table[' % points '] = round ((my_table[' points ']/my_table[' points ']. sum ())* 100 , 2 )

#view updated pivot table
print (my_table)

               points % points
team position                  
A Forward 29 16.76
     Guard 52 30.06
B Forward 43 24.86
     Guard 49 28.32

Os valores percentuais agora são arredondados para duas casas decimais.

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

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns em pandas:

Pandas: como adicionar filtro à tabela dinâmica
Pandas: Como classificar a tabela dinâmica por valores na coluna
Pandas: como criar uma tabela dinâmica com soma de valores

Add a Comment

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