J'essaie de savoir comment utiliser la fonction groupby
dans pandas pour déterminer les proportions de valeurs par an avec un critère Oui/Non donné.
Par exemple, j'ai une trame de données appelée 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
Je peux utiliser
namesgrouped = names.groupby(["Sex", "Year", "Criteria"]).sum()
obtenir:
Number
Sex Year Criteria
Male 1998 N 14507
Y 2308
1999 N 14119
Y 2331
etc. Je voudrais que la colonne `` Critères numériques '' indique le% du total pour chaque sexe et année - donc au lieu de N = 14507 et Y = 2308 pour 1998 ci-dessus, j'aurais N = 86,27% et Y = 13,73%.
Quelqu'un peut-il me conseiller sur la façon de procéder?
Cette question est une extension directe du doublon suggéré . Empruntant à la réponse acceptée, cela fonctionnera:
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
Edit : une opération de transformation peut être plus rapide que d'appliquer:
namesgrouped / namesgrouped.groupby(level=[0, 1]).transform('sum')