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: 조건이 있는 열의 값을 계산하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다