데이터 순위 산출하기 : rank()

30 P
QUESTION 13 #329
데이터프레임의 수치 데이터를 기준으로 순위를 매기는 프로그램입니다. 빈칸을 채워보세요.
main.py
import pandas as pd

data = {"이름": ["A", "B", "C", "D", "E"], "점수": [90, 80, 80, 100, 70]}
df = pd.DataFrame(data)

# 1. 기본 랭킹 (동점자는 평균 순위로 처리)
df["기본순위"] = df["점수"].(ascending=False)

# 2. 경쟁 방식 랭킹 (1, 2, 2, 4등 방식)
df["경쟁순위"] = df["점수"].(ascending=False, method="min")

print(df["경쟁순위"].tolist())
실행 결과 예시
[2.0, 3.0, 3.0, 1.0, 5.0]
INTERACTIVE SHELL Shift + Enter 로 즉시 실행

rank()로 데이터에 순위 매기기

rank()는 데이터의 값을 기준으로 자동으로 순위를 계산하는 함수입니다.

기본 문법

df["열이름"].rank(ascending=False)

코드 분석

data = {"이름": ["A", "B", "C", "D", "E"], "점수": [90, 80, 80, 100, 70]}
이름  점수   순위는?
 A    90     2등
 B    80     3등? 4등?  ← 동점!
 C    80     3등? 4등?  ← 동점!
 D   100     1등
 E    70     5등

동점 처리 방법 (method 옵션)

method B의 순위 C의 순위 다음 순위 설명
"average" (기본) 3.5 3.5 5 평균값 (3+4)/2
"min" 3 3 5 더 높은(작은) 순위
"max" 4 4 5 더 낮은(큰) 순위
"first" 3 4 5 먼저 나온 순서대로
"dense" 3 3 4 빈 순위 없이 연속

기본 순위 vs 경쟁 방식

# 기본 (average): 동점은 평균 순위
df["기본순위"] = df["점수"].rank(ascending=False)
# [2.0, 3.5, 3.5, 1.0, 5.0]

# 경쟁 방식 (min): 스포츠 순위와 같음
df["경쟁순위"] = df["점수"].rank(ascending=False, method="min")
# [2.0, 3.0, 3.0, 1.0, 5.0]

경쟁 방식은 스포츠 대회의 순위와 같습니다:

  • 1등: D (100점)
  • 2등: A (90점)
  • 공동 3등: B, C (80점) ← 동점이므로 3등 두 명
  • 5등: E (70점) ← 4등을 건너뜀

ascending 옵션

# ascending=False: 높은 값이 1등 (점수 순위)
df["점수"].rank(ascending=False)

# ascending=True: 낮은 값이 1등 (시간 순위)
df["시간"].rank(ascending=True)
ascending 1등 조건 사용 예
False 값이 가장 큰 점수, 매출
True 값이 가장 작은 시간, 거리

💡 핵심: method="min"은 공동 순위 뒤 번호를 건너뛰는 일반적인 랭킹 방식입니다.