안녕하세요.
오늘은 파이썬 데이터프레임에서 순위를 매기는 방법에 대해 알아보겠습니다.
파이썬 컬럼 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(동점 순위 표시)는 다음과 같음
- average(평균) : 평균 순위 (N명이 공동 1등, n명 모두 1+1/N)
- min(최소)/max(최대) : 해당 순위에서 가장 낮거나 높은 순위 (N명이 공동 1등, N명 모두 1등(최소)/2등(최대))
- first : 순서(index 번호)에 따라 순위 부여
- 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별 순위를 부여함
반응형
'Programming > Python' 카테고리의 다른 글
[Python] textwrap 문자열 래핑하기 (2) | 2023.12.26 |
---|---|
[Python] 최대, 최솟값 인덱스 구하기 (1) | 2023.12.22 |
[Python] 환율 정보 가져오기 (4) | 2023.12.20 |
[Python] 파이썬 엑셀 이미지 삽입하기 (2) | 2023.11.13 |
[Python] Tesseract OCR 이미지 추출하기 (4) | 2023.07.15 |
댓글