¿Cómo obtener las 5 filas clasificadas más densas en Pandas?

Así que traté de hacer que esto funcionara. Sé cómo ordenar, usar nlargest o usar rank con método denso ... Pero de alguna manera todavía estoy perdido.

Esto es lo que quiero lograr:

  • Siempre quiero tener las 3 primeras filas según algún valor (1, 2, 3)
  • Pero, si hay varias filas con los mismos valores, entonces quiero tener más de 3 filas (por ejemplo, 1,2,2,3 debería devolver 4 filas)

Digamos que tengo estos datos

ingrese la descripción de la imagen aquí

Quiero seleccionar las 3 primeras filas en función de la puntuación más baja y quiero obtener esto

ingrese la descripción de la imagen aquí

Como dije, quiero las 3 primeras filas, pero si hay la misma puntuación, debería obtener 4 o más.

Me perdí un poco en todas las combinaciones que probé. ¿Hay una manera simple de hacer esto?

Answer

Puede crear una matriz que tenga los 3 valores más pequeños de su columna Puntuación y luego usarla isinpara filtrar su marco de datos:

some_vals = pd.Series(df['Score'].unique()).nsmallest(3).values
df[df['Score'].isin(some_vals)]

   Name  Score
0   John      1
1   Mark      2
2  Perry      2
3   Dion      3

De esta forma se asegura de que todos los Nombres que tengan un valor en Puntuación igual a cualquiera de los 3 valores más pequeños serán devueltos.