Pandas: 백분율로 크로스탭을 만드는 방법
pandas crosstab() 함수에서 Normalize 인수를 사용하여 숫자 대신 백분율 값을 표시하는 크로스탭을 만들 수 있습니다.
p.d. crosstab (df. col1 , df. col2 , normalize=' index ')
Normalize 인수는 세 가지 다른 인수를 허용합니다.
- all : 모든 값에 대한 비율을 표시합니다.
- index : 행 값의 합계로 백분율을 표시합니다.
- 열 : 열 값의 합계로 백분율을 표시합니다.
다음 예에서는 실제로 다음 pandas 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
팀 및 포지션당 플레이어 수에 대한 기본 크로스탭은 다음과 같습니다.
#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
예 1: 모든 값에 대한 백분율을 사용하여 교차 분석 만들기
Normalize=all 인수와 함께 crosstab() 함수를 사용하여 모든 값의 총 개수에 대한 각 값의 백분율을 표시하는 크로스탭을 만들 수 있습니다.
#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
결과를 해석하는 방법은 다음과 같습니다.
- F 포지션의 A팀 선수는 전체 선수의 9.09%를 차지합니다.
- A팀의 G 포지션 선수는 전체 선수의 18.18%를 차지합니다.
등등.
예 2: 행 합계에 대한 백분율이 포함된 교차 분석 만들기
Normalize=index 인수와 함께 crosstab() 함수를 사용하여 행 합계에 대한 각 값의 백분율을 표시하는 크로스탭을 만들 수 있습니다.
#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
결과를 해석하는 방법은 다음과 같습니다.
- F 포지션의 선수는 A 팀 전체 선수의 33.33%를 차지합니다.
- F 포지션의 선수는 B 팀 전체 선수의 75% 를 차지합니다.
- F 포지션의 선수는 C 팀 전체 선수의 50% 를 차지합니다.
등등.
예 3: 열 합계에 대한 백분율이 포함된 교차 분석 만들기
Normalize=columns 인수와 함께 crosstab() 함수를 사용하여 열 전체에 대한 각 값의 백분율을 표시하는 크로스탭을 만들 수 있습니다.
#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
결과를 해석하는 방법은 다음과 같습니다.
- A팀 선수는 전체 F 포지션 선수의 16.67%를 차지합니다.
- B팀 선수는 F 포지션의 전체 선수 중 50%를 차지합니다.
- C팀 선수는 전체 F 포지션 선수의 33.33%를 차지합니다.
등등.
참고 : 여기에서 pandas crosstab() 함수에 대한 전체 문서를 찾을 수 있습니다.
추가 리소스
다음 튜토리얼에서는 Pandas에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.
Pandas: GroupBy 및 값 개수를 사용하는 방법
Pandas: Bin 개수와 함께 GroupBy를 사용하는 방법
Pandas: 조건이 있는 열의 값을 계산하는 방법