python - seleccionar - Cómo usar groupby en pandas para calcular un porcentaje/proporción total basado en un criterio en otra columna
pandas python tutorial español (1)
Estoy tratando de averiguar cómo usar la función groupby en pandas para calcular las proporciones de valores por año con un criterio dado de Sí / No.
Por ejemplo, tengo un marco de datos, vamos a llamarlo nombres:
Name Number Year Sex Criteria
0 name1 789 1998 Male N
1 name1 688 1999 Male N
2 name1 639 2000 Male N
3 name2 551 1998 Male Y
4 name2 499 1999 Male Y
Puedo usar
namesgrouped = names.groupby(["Sex","Year","Criteria"]).sum()
Llegar:
Number
Sex Year Criteria
Male 1998 N 14507
Y 2308
1999 N 14119
Y 2331
y así. Me gustaría que la columna ''Criterios numéricos'' muestre el% del total para cada género y año, así que en vez de N = 14507 e Y = 2308 para 1998, tendría N = 86.27% e Y = 13.73%.
¿Alguien puede aconsejarme cómo hacer esto? ¡Gracias por adelantado!
Esta pregunta es una extensión directa del duplicado sugerido . Tomando prestado de la respuesta aceptada, esto funcionará:
In [46]: namesgrouped.groupby(level=[0, 1]).apply(lambda x: x / x.sum())
Out[46]:
Number
Sex Year Criteria
Male 1998 N 0.588806
Y 0.411194
1999 N 0.579612
Y 0.420388
2000 N 1.000000