Tengo un marco de datos:

  Group  Score
    1      3
    1      2
    2      3
    2      1
    3      0
    3      1
    4      1
    4      1

Quiero tomar la puntuación media de cada grupo y clasificar a todos los grupos según la puntuación promedio en orden descendente.

Mi proceso de pensamiento inicial es hacer Groupby en la columna Group y encontrar el promedio de la columna de puntuación, pero no estoy seguro de cuáles serán los próximos pasos

0
tj judge 8 jun. 2021 a las 22:35

2 respuestas

La mejor respuesta

Intente con groupby transform para obtener los valores medios luego rank:

df['Rank'] = (
    df.groupby('Group')['Score']
        .transform('mean')
        .rank(method='dense', ascending=False)
        .astype(int)
)

df:

   Group  Score  Rank
0      1      3     1
1      1      2     1
2      2      3     2
3      2      1     2
4      3      0     4
5      3      1     4
6      4      1     3
7      4      1     3
1
Henry Ecker 8 jun. 2021 a las 19:39

TRATAR:

g_df = df.groupby('Group').mean()
g_df['rank'] = g_df['Score'].rank().astype(int)

Salida:

       Score  rank
Group             
1        2.5     4
2        2.0     3
3        0.5     1
4        1.0     2
0
Nk03 8 jun. 2021 a las 19:39