Clasificar Puntajes

Tabla: Scores

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| score       | decimal |
+-------------+---------+

- "id" es la clave primaria para esta tabla.
- Cada fila contiene el puntaje de un juego. 
- "Score" es un valor de punto flotante con dos decimales.

Escribe una solución para encontrar el ranking de los puntajes. El ranking debe calcularse de acuerdo a las siguientes reglas:

  • Los puntajes debe clasificarse del más alto al más bajo.
  • Si hay un empate entre dos puntajes, ambos deben tener el mismo ranking.
  • Despues de un empate, el siguiente número de ranking debe ser el siguiente valor entero consecutivo. En otras palabras, no debe hacer huecos entre rangos.

Devuelve la tabla resultado ordenada por score en orden descendente

Ejemplo

Input

tabla Scores
+----+-------+
| id | score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+

Output

Output
+-------+------+
| score | rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

Soluciones

import pandas as pd

def order_scores(scores: pd.DataFrame) -> pd.DataFrame:
    
    result = scores.copy()
    result['rank'] = result['score'].rank(method='dense', ascending=False)
    result['rank'] = result['rank'].astype(int)
    
    return result[['score', 'rank']].sort_values('score', ascending=False)