Cómo usar groupby en pandas para calcular un porcentaje / proporción total basado en un criterio en otra columna

Estoy intentando averiguar cómo usar la función groupby en pandas para calcular las proporciones de valores por año con un determinado criterio de Sí / No.

Por ejemplo, tengo un dataframe llamado names :

  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; por lo tanto, en lugar de N = 14507 e Y = 2308 para 1998 arriba, tendría N = 86.27% e Y = 13.73%.

¿Alguien puede aconsejar cómo hacer esto?

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 g: g / g.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