Python 3.x: calcular el porcentaje de valores agrupados

CorePress2024-01-25  10

Tengo un marco de datos de Pandas que se parece a "

Calculé el número de victorias, derrotas y empates para cada año, y ahora se ve así:

Mi objetivo es calcular el porcentaje de cada grupo de puntuación por año. Para llegar a ser como:

Pero me quedé aquí. Busqué en este hilo pero no pude aplicarlo en mi df.

¿Alguna idea?



------------------------------------

Aquí hay un método bastante simple que escribí para esta tarea:

Simplemente haz lo siguiente:

cree un marco de datos de la puntuación total dentro de cada año: puntuación_total = df.groupby('año')['puntuación'].sum().reset_index(nombre = 'puntuación_total_cada_año')fusione el marco de datos original y el nuevo en un solo marco de datos: df = df.merge(puntuación_total, en = 'año') calcular los porcentajes: df['porcentajes'] = 100 * (df['puntuación'] / df['total_score_each_year'])

Eso es todo, espero que te ayude :)



------------------------------------

Podrías intentar usar: df.iat[fila, columna]

se vería así:

percentages = []
for i in range(len(df) // 3):
  draws = df.iat[i, 2]
  losses = df.iat[i + 1, 2]
  wins = df.iat[i + 2, 2]
  nbr_of_games = draws + losses + wins
  percentages.append[draws * 100/nbr_of_games] #Calculate percentage of draws
  percentages.append[losses * 100/nbr_of_games] #Calculate percentage of losses
  percentages.append[wins * 100/nbr_of_games] #Calculate percentage of wins

df["percentage"] = percentages

¡Puede que esta no sea la forma más rápida de hacerlo, pero espero que te ayude!



------------------------------------

Similar a la respuesta de @panter, pero en una sola línea y sin crear ningún DataFrame adicional:

df['percentage'] = df.merge(df.groupby('year').score.sum(), on='year', how='left').apply(
    lambda x: x.score_x * 100 / x.score_y,  axis=1
)

En detalle:

df.groupby('year').score.sum() crea un DataFrame con la suma de la puntuación por año. df.merge crea un marco de datos igual al df original, pero con la columna puntuación renombrada a puntuación_x y una columna adicional puntuación_y, que representa la suma de todas las puntuaciones para el año de cada fila; how='left' mantiene solo la fila en el DataFrame izquierdo, es decir, df. .apply calcula para cada uno el porcentaje correspondiente, utilizando puntuación_x y puntuación_y (tenga en cuenta la opción eje=1, para aplicar la lambda fila por fila).

1

bonita frase :)

- Ofir Shorer

28/03/2021 a las 18:14

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare