Panda's: een kruistabel met percentages maken


U kunt het argument normaliseren in de functie pandas crosstab() gebruiken om een kruistabel te maken die procentuele waarden weergeeft in plaats van getallen:

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

Het normalisatieargument accepteert drie verschillende argumenten:

  • alles : Toon percentage ten opzichte van alle waarden.
  • index : Toon percentage als totaal van rijwaarden.
  • Kolommen : geeft het percentage weer als het totaal van de kolomwaarden.

De volgende voorbeelden laten zien hoe u elk van deze methoden in de praktijk kunt gebruiken met de volgende panda’s DataFrame:

 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

Zo ziet de standaardkruistabel eruit voor het aantal spelers per team en positie:

 #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

Voorbeeld 1: Maak een kruistabel met percentages ten opzichte van alle waarden

We kunnen de functie kruistabel() gebruiken met het argument normalize=all om een kruistabel te maken waarin de percentages van elke waarde worden weergegeven ten opzichte van het totale aantal van alle waarden:

 #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

Zo interpreteert u het resultaat:

  • De spelers van team A op positie F vertegenwoordigen 9,09% van het totaal aantal spelers.
  • De spelers van team A op positie G vertegenwoordigen 18,18% van het totaal aantal spelers.

Enzovoort.

Voorbeeld 2: Maak een kruistabel met percentages ten opzichte van rijtotalen

We kunnen de functie kruistabel() gebruiken met het argument normalize=index om een kruistabel te maken waarin de percentages van elke waarde ten opzichte van het rijtotaal worden weergegeven:

 #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

Zo interpreteert u het resultaat:

  • Spelers op positie F vertegenwoordigen 33,33% van het totaal aantal spelers van team A.
  • Spelers in positie F vertegenwoordigen 75% van het totaal aantal spelers in team B.
  • Spelers in positie F vertegenwoordigen 50% van het totaal aantal spelers in team C.

Enzovoort.

Voorbeeld 3: Maak een kruistabel met percentages ten opzichte van kolomtotalen

We kunnen de functie kruistabel() gebruiken met het argument normalize=columns om een kruistabel te maken waarin de percentages van elke waarde ten opzichte van het kolomtotaal worden weergegeven:

 #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

Zo interpreteert u het resultaat:

  • Team A-spelers vertegenwoordigen 16,67% van het totaal aantal spelers met een F-positie.
  • Spelers van team B vertegenwoordigen 50% van het totaal aantal spelers met een F-positie.
  • Team C-spelers vertegenwoordigen 33,33% van het totaal aantal spelers met een F-positie.

Enzovoort.

Opmerking : u kunt de volledige documentatie van de pandas crosstab() -functie hier vinden.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in panda’s kunt uitvoeren:

Panda’s: GroupBy gebruiken en waardetellingen
Panda’s: GroupBy gebruiken met het aantal bakken
Panda’s: waarden tellen in een kolom met voorwaarde

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert