Panda: come creare una tabella incrociata con percentuali
Puoi utilizzare l’argomento normalize nella funzione pandas crosstab() per creare una tabella a campi incrociati che visualizzi valori percentuali anziché numeri:
p.d. crosstab (df. col1 , df. col2 , normalize=' index ')
L’argomento normalizzazione accetta tre diversi argomenti:
- all : mostra la percentuale relativa a tutti i valori.
- indice : mostra la percentuale come totale dei valori di riga.
- Colonne : visualizza la percentuale come totale dei valori delle colonne.
I seguenti esempi mostrano come utilizzare ciascuno di questi metodi nella pratica con i seguenti DataFrame panda:
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
Ecco come apparirebbe la tabella incrociata predefinita per il numero di giocatori per squadra e posizione:
#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
Esempio 1: creare una tabella incrociata con percentuali relative a tutti i valori
Possiamo utilizzare la funzione crosstab() con l’argomento normalize=all per creare una tabella a campi incrociati che visualizza le percentuali di ciascun valore rispetto al numero totale di tutti i valori:
#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
Ecco come interpretare il risultato:
- I giocatori della squadra A nella posizione F rappresentano il 9,09% del totale dei giocatori.
- I giocatori della squadra A in posizione G rappresentano il 18,18% del totale dei giocatori.
E così via.
Esempio 2: creare una tabella a campi incrociati con le percentuali rispetto ai totali delle righe
Possiamo utilizzare la funzione crosstab() con l’argomento normalize=index per creare una tabella a campi incrociati che visualizza le percentuali di ciascun valore rispetto al totale della riga:
#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
Ecco come interpretare il risultato:
- I giocatori in posizione F rappresentano il 33,33% del totale dei giocatori della squadra A.
- I giocatori nella posizione F rappresentano il 75% del totale dei giocatori della squadra B.
- I giocatori nella posizione F rappresentano il 50% del totale dei giocatori della squadra C.
E così via.
Esempio 3: creare una tabella a campi incrociati con le percentuali rispetto ai totali delle colonne
Possiamo utilizzare la funzione crosstab() con l’argomento normalize=columns per creare una tabella a campi incrociati che visualizza le percentuali di ciascun valore rispetto al totale della colonna:
#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
Ecco come interpretare il risultato:
- I giocatori della squadra A rappresentano il 16,67% del totale dei giocatori con ruolo F.
- I giocatori della squadra B rappresentano il 50% del totale dei giocatori con una posizione F.
- I giocatori della squadra C rappresentano il 33,33% del totale dei giocatori con ruolo F.
E così via.
Nota : puoi trovare la documentazione completa della funzione pandas crosstab() qui .
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:
Panda: come utilizzare GroupBy e conteggi dei valori
Panda: come utilizzare GroupBy con il conteggio dei contenitori
Panda: come contare i valori in una colonna con condizione