본문 바로가기
Programming/Python

[Python] 파이썬 순위 매기기

by 코딩하는 금융인 2023. 12. 21.

안녕하세요.

오늘은 파이썬 데이터프레임에서 순위를 매기는 방법에 대해 알아보겠습니다.

 

 파이썬 컬럼 or 그룹별 순위 매기기

▣ 특정 컬럼으로 순위 매기기

 - 파이썬 pandas 라이브러리에는 rank() 함수를 통해서 데이터프레임(DataFrame)의 특정 컬럼 기준으로 순위를 매길 수 있음

DataFrame.rank(self,
                            axis = 0, # 기본값은 0으로, index를 축으로 순위가 계산됨
                            method = '?', # 같은 값을 가진 데이터 순위를 매기는 방법
                            numeric_only = None, # True일 시, 숫자 값만 순위를 매김
                            na_option = 'keep', # NaN 처리 방법으로, top : 낮은 순위/ bottom : 높은 순위 / keep : NaN 유지
                            ascending = True, # True는 오름차순, False는 내림차순
                            pct = False) # 순위의 백분위수(소숫점) 표시 여부

 

 - rank() 함수의 method(동점 순위 표시)는 다음과 같음

  1. average(평균) : 평균 순위 (N명이 공동 1등, n명 모두 1+1/N)
  2. min(최소)/max(최대) : 해당 순위에서 가장 낮거나 높은 순위 (N명이 공동 1등, N명 모두 1등(최소)/2등(최대))
  3. first : 순서(index 번호)에 따라 순위 부여
  4. dense : min과 비슷하게 공동 등수를 부여하지만, 그 다음 등수는 반드시 +1로 처리

 

: iris로 실습하기

# 데이터 생성
import seaborn as sns
iris = sns.load_dataset('iris')

# 동점 순위 매기기 list
method_list = ['average', 'min', 'max', 'first', 'dense']

# 내림차순 기준
for method in method_list:
 iris[f'sl_rank_{method}'] = iris['sepal_length'].rank(method=method, ascending=False)

# row 10 예시
iris.head(10)

 

 - iris 데이터의 sepal_length 컬럼 기준으로 내림차순에 해당하는 method별 순위를 부여함

실습 결과

 

▣ 그룹별 순위 매기기

 - 앞선 방법과 동일하게 rank() 함수를 사용하되, pandas의 groupby() 함수를 추가로 활용하면 됨

# 데이터 생성
import seaborn as sns
iris = sns.load_dataset('iris')

# 동점 순위 매기기 list
method_list = ['average', 'min', 'max', 'first', 'dense']

# 내림차순 기준
for method in method_list:
 iris[f'sl_rank_{method}'] = iris.groupby('species')['sepal_length'].rank(method=method, ascending=False)

iris.sort_values('sepal_length', ascending=False).head(10)

 

 - iris 데이터의 sepal_length 컬럼 기준으로 species(그룹)별로 내림차순에 해당하는 method별 순위를 부여함

 

실습 결과 2

 

반응형

댓글