Tengo un marco de datos con 4 columnas, una identificación y tres categorías en las que cayeron los resultados
<80% 80-90 >90 id 1 2 4 4 2 3 6 1 3 7 0 3Me gustaría convertirlo a porcentajes, es decir:
<80% 80-90 >90 id 1 20% 40% 40% 2 30% 60% 10% 3 70% 0% 30%esto parece que debería estar dentro de las capacidades de los pandas, pero simplemente no puedo entenderlo.
¡Gracias por adelantado!
Puede hacer esto usando los operadores básicos de pandas .div y .sum , usando el argumento del axis para asegurarse de que los cálculos se realicen de la manera que desea:
cols = ['<80%', '80-90', '>90'] df[cols] = df[cols].div(df[cols].sum(axis=1), axis=0).multiply(100)df[cols].sum(axis=1 ). axis=1 hace que la suma se produzca en las filas, en lugar de en las columnas.df[cols].div(df[cols].sum(axis=1), axis=0 ). axis=0 hace que la división se realice en las columnas.100 para que sean porcentajes entre 0 y 100 en lugar de proporciones entre 0 y 1 (o puedes saltarte este paso y almacenarlos como proporciones).df/df.sum()Si desea dividir la suma de filas, transpóngala primero.
La respuesta de Tim Tian funcionó bastante bien para mí, pero tal vez esto ayude si tienes un df con varias columnas y quieres hacer una columna de %.
df_pct = df/df[df.columns].sum()*100Estaba teniendo problemas porque quería tener el resultado de pd.pivot_table expresado como%, pero no pude hacerlo funcionar. Así que usé ese código en la tabla resultante y funcionó.