데이터 분석을 하다 보면 데이터프레임의 특정 열 값들을 기준으로 순위(rank)를 매겨야 하는 경우가 자주 있습니다. 이때 판다스(Pandas)의 rank() 함수를 사용하면 간단하게 해결할 수 있습니다. 특히 동일한 값을 가진 항목이 여러 개일 때 method='min' 옵션을 사용하면 해당 그룹 전체에 최소 순위가 부여됩니다.
문제 상황
다음과 같은 데이터프레임이 있다고 가정해 보겠습니다. 여기서 'Age' 열을 기준으로 최소 순위(minimum rank)를 계산하는 것이 목표입니다.
Id Name Age Rank 0 1 Adam 12 1.0 1 2 David 13 3.0 2 3 Michael 14 5.0 3 4 Peter 12 1.0 4 5 William 13 3.0
해결 방법
이 문제는 다음 두 단계로 해결할 수 있습니다.
- 먼저 데이터프레임을 정의합니다.
- 'Age' 열을
rank()함수에 적용하여 axis=0(열 방향), method='min', ascending=True 조건으로 최소 순위를 계산합니다.
df["Age"].rank(axis=0, method='min', ascending=True)
rank() 함수의 주요 매개변수
- axis=0: 열 방향으로 순위를 계산합니다.
- method='min': 동일한 값이 있을 경우 해당 그룹에 가장 낮은(최소) 순위를 부여합니다. 예를 들어 1등이 두 명이면 둘 다 1순위가 되고, 다음 값은 3순위가 됩니다.
- ascending=True: 값이 작을수록 높은 순위를 받습니다.
전체 예제 코드
아래 코드를 통해 실제 동작을 확인해 보겠습니다.
import pandas as pd
data = {'Id': [1, 2, 3, 4, 5],
'Name': ["Adam", "David", "Michael", "Peter", "William"],
'Age': [12, 13, 14, 12, 13]}
df = pd.DataFrame(data)
df["Rank"] = df["Age"].rank(axis=0, method='min', ascending=True)
print(df)실행 결과
Id Name Age Rank 0 1 Adam 12 1.0 1 2 David 13 3.0 2 3 Michael 14 5.0 3 4 Peter 12 1.0 4 5 William 13 3.0
결과 해석
실행 결과를 살펴보면 다음과 같은 규칙으로 순위가 매겨진 것을 확인할 수 있습니다.
- Adam과 Peter는 나이가 12로 같으므로 둘 다 최소 순위인 1.0을 받습니다.
- David와 William은 나이가 13으로 같으므로 3.0순위를 받습니다. 앞의 1순위가 두 개 있기 때문에 다음 순위는 3이 됩니다.
- Michael은 나이가 14로 가장 많아 5.0순위를 받습니다.
이처럼 rank() 함수의 method='min' 옵션을 활용하면 동점자 처리 규칙을 명확하게 지정하면서 손쉽게 순위를 계산할 수 있습니다.