Python

[pandas] DataFrame.rank, 관련 문제 Leetcode 《178. Rank Scores》

루루23 2024. 12. 3. 23:23
반응형

DataFrame.rank(axis=0method='average'numeric_only=Falsena_option='keep'ascending=Truepct=False)

Parameters:

1. axis(default 0) : 순위를 계산할 축 설정

  • Series의 경우 이 파라미터 사용되지 않음
  • DataFrame의 경우
    - 0, ‘index’ : 각 행 내에서 순위를 부여
    - 1, ‘columns’ : 각 열 내에서 순위를 부여

2. method(default ‘average’) : 동일한 값(ties)에 순위를 할당하는 방식

  • 'average' : 평균 순위 (1, 2.5, 2.5, 4, ...)
  • 'min' : 낮은 순위 (1, 3, 3, 4, ...)
  • 'max' : 높은 순위 (1, 2, 2, 4, ...)
  • 'first' : 배열에서 나타나는 순위
  • 'dense' : 다음 순위와의 차이가 무조건 1 (1, 2, 2, 3, ...)

3. numeric_only(default False) : DataFrame에 대해 순위를 계산 시 숫자형 열만 계산하려면 True로 설정

 

4. na_option(default 'keep') : NaN 값을 어떻게 처리할지

  • 'keep' : NaN 그대로 유지
  • 'top' : 가장 낮은 순위 부여
  • 'bottom' : 가장 높은 순위 부여

5. ascending(default True) : 오름차순 혹은 내림차순으로 계산

 

6. pct(default False) : 반환되는 순위를 백분율 형태로 표시할지

 

 

관련 문제

Leetcode 《178. Rank Scores

@ Medium

@ Pandas

https://leetcode.com/problems/rank-scores/description/?lang=pythondata

Table: Scores

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| score       | decimal |
+-------------+---------+
id is the primary key (column with unique values) for this table.
Each row of this table contains the score of a game. 
Score is a floating point value with two decimal places.


Write a solution to find the rank of the scores. The ranking should be calculated according to the following rules:

The scores should be ranked from the highest to the lowest.
If there is a tie between two scores, both should have the same ranking.
After a tie, the next ranking number should be the next consecutive integer value. In other words, there should be no holes between ranks.

Return the result table ordered by score in descending order.
The result format is in the following example.

import pandas as pd

def order_scores(scores: pd.DataFrame) -> pd.DataFrame:
    scores['rank'] = scores['score'].rank(method='dense', ascending=False)
    scores = scores.sort_values('rank')
    return scores.drop('id', axis=1)
반응형