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