Table: Scores
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| score | decimal |
+-------------+---------+
id는 이 테이블의 기본 키입니다(고유한 값을 가지는 열).
이 테이블의 각 행은 게임의 점수를 포함하고 있습니다.
점수는 소수점 둘째 자리까지 있는 부동 소수점 값입니다.
문제
점수의 순위를 찾는 솔루션을 작성하십시오. 순위는 다음 규칙에 따라 계산되어야 합니다:
점수는 높은 점수에서 낮은 점수 순으로 순위가 매겨져야 합니다.
두 점수가 동일한 경우, 두 점수는 동일한 순위를 가져야 합니다.
동점 이후의 다음 순위 번호는 다음 연속 정수 값이어야 합니다. 다시 말해, 순위 사이에 공백이 있어서는 안 됩니다.
결과 테이블은 점수를 기준으로 내림차순으로 정렬되어 반환되어야 합니다.
결과 형식은 다음 예시와 같습니다.
Example 1:
Input:
Scores table:
+----+-------+
| id | score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
Output:
+-------+------+
| score | rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+-------+------+
✏️ 풀이
import pandas as pd
def order_scores(scores: pd.DataFrame) -> pd.DataFrame:
scores['rank'] = scores['score'].rank(method='dense', ascending=False)
return scores[['score', 'rank']].sort_values(by='score', ascending=False)
📚 개념정리
rank() ? 데이터에 순위를 매길 때 사용하는 함수
# 기본 사용법 #
import pandas as pd
s = pd.Series([100, 200, 100, 300])
s.rank()
# 결과 #
0 1.5
1 3.0
2 1.5
3 4.0
dtype: float64
method : 동점자 처리 방식
- average : (기본값) 동점자에게 평균 순위 부여
- min : 동점자에게 가장 낮은 순위 부여
- max : 동점자에게 가장 높은 순위 부여
- first : 먼저 나온 순서대로 순위 부여
- dense : 연속된 순위를 부여, 중복 순위 후에도 순위가 건너뛰지 않음(홀 없음)
ascending : 정렬 방향
- 기본값 : True 낮은 값에 낮은 순위
- False로 설정하면 높은 값에 낮은 순위
na_option : 결측치 처리
- keep : NaN은 NaN으로 유지 (기본값)
- top : NaN을 가장 높은 순위로 처리
- bottom : NaN을 가장 낮은 순위로 처리
'[코딩테스트] > [Pandas]' 카테고리의 다른 글
[LeetCode - Pandas] (Medium) 184. Department Highest Salary (1) | 2025.05.29 |
---|---|
[LeetCode - Pandas] (Medium) 180. Consecutive Numbers (1) | 2025.05.28 |
[LeetCode - Pandas] (Medium) 177. Nth Highest Salary (0) | 2025.05.13 |
[LeetCode - Pandas] (Medium) 176. Second Highest Salary (0) | 2025.05.13 |
[LeetCode - Pandas] (Easy) 175. Combine Two Tables (0) | 2025.05.09 |