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