데이터프레임의 각 행에 순위를 나타내는 열을 추가하면 데이터를 손쉽게 정렬하고 특정 요소의 순위를 파악할 수 있습니다. 예를 들어 다음과 같은 게임 정보 데이터프레임이 있다고 가정해 보겠습니다.
예시 데이터프레임
| Name | Play Time (in hours) | Rate | |
|---|---|---|---|
| 0 | Call Of Duty | 45 | Better than Average |
| 1 | Total Overdose | 46 | Good |
| 2 | GTA3 | 52 | Best |
| 3 | Bully | 22 | Average |
순위 열 추가 후 결과
| Name | Play Time (in hours) | Rate | Rate ranking | |
|---|---|---|---|---|
| 0 | Call Of Duty | 45 | Better than Average | 3.0 |
| 1 | Total Overdose | 46 | Good | 2.0 |
| 2 | GTA3 | 52 | Best | 1.0 |
| 3 | Bully | 22 | Average | 4.0 |
위 결과를 보면 순위가 정수처럼 보이지만 소수점(.0)이 붙어 있는 것을 알 수 있습니다. 이는 순위가 실수로 표현될 수 있음을 의미합니다. 데이터프레임 안에 동일한 값을 가진 요소, 즉 동률(tie)이 존재하면 해당 순위가 여러 요소 사이에서 나누어지기 때문에 순위 값이 실수 형태로 출력됩니다.
rank() 함수로 순위 지정하기
Pandas 라이브러리에는 순위를 계산하는 내장 함수인 .rank()가 포함되어 있습니다. 이 함수에 순위를 매길 기준이 되는 열을 전달하면, 각 행의 순위가 저장된 새로운 열을 반환합니다. 기본적으로 오름차순으로 순위가 매겨지며, ascending=0(False) 옵션을 사용하면 값이 클수록 높은 순위를 받도록 설정할 수 있습니다.
코드 예시
.rank() 함수를 활용한 전체 코드입니다.
import pandas as pd
games = {'Name': ['Call Of Duty', 'Total Overdose', 'GTA 3', 'Bully'],
'Play Time(in hours)': [45, 46, 52, 22],
'Rate': ['Better than Average', 'Good', 'Best', 'Average']}
df = pd.DataFrame(games)
df['ranking'] = df['Play Time(in hours)'].rank(ascending=0)
print(df)
실행 결과
Name Play Time(in hours) Rate ranking
0 Call Of Duty 45 Better than Average 3.0
1 Total Overdose 46 Good 2.0
2 GTA 3 52 Best 1.0
3 Bully 22 Average 4.0
코드 설명
이 코드에서는 Pandas 라이브러리의 내장 함수를 사용해 데이터프레임의 각 요소에 순위를 부여했습니다. 순위를 매기는 기준 열로 플레이 시간을 담고 있는 'Play Time(in hours)' 열을 선택했으며, ascending=0 옵션 덕분에 플레이 시간이 길수록 높은 순위(1위)를 받게 됩니다.
그다음 데이터프레임에 'ranking'이라는 새로운 열을 추가하고, 여기에 .rank() 함수의 결과를 저장했습니다. 순위를 계산할 대상 열 이름을 함수에 전달하면 자동으로 각 행의 순위가 계산되며, 마지막으로 print(df)를 통해 순위 열이 추가된 전체 데이터프레임을 출력합니다.
마무리
이번 글에서는 Pandas 라이브러리와 .rank() 함수를 활용해 데이터프레임의 행에 순위를 지정하고 결과를 출력하는 방법을 알아보았습니다. DataFrame의 행 순위를 매기는 작업은 어렵지 않지만, 기준 열 선택과 ascending 옵션 설정만 제대로 이해하면 누구나 쉽게 활용할 수 있습니다. 동률 처리 방식(method 옵션)까지 함께 익혀두면 더욱 유용하게 사용할 수 있습니다.