2016-05-02 11 views
5

Sto cercando di capire come utilizzare la funzione groupby in panda per calcolare le proporzioni di valori all'anno con un dato Sì/nessun criterio.Come utilizzare groupby in panda per calcolare un totale percentuale/proporzione basato su un criterio in un'altra colonna

Per esempio, ho un dataframe, consente di chiamare i nomi:

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 

posso usare

namesgrouped = names.groupby(["Sex","Year","Criteria"]).sum() 

per ottenere:

    Number 
Sex Year  Criteria 
Male 1998 N  14507 
      Y   2308 
     1999 N  14119 
      Y   2331 

e così via. Vorrei che la colonna "Criteri numerici" mostrasse la% del totale per sesso e anno, quindi anziché N = 14507 e Y = 2308 per il 1998 sopra avrei N = 86,27% e Y = 13,73%.

Qualcuno può consigliare come fare questo? Grazie in anticipo!

+1

Eventuali duplicati di [Panda percentuale del totale con groupby] (http://stackoverflow.com/questions/23377108/pandas-percentage-of-total-with- groupby) – IanS

+0

Sfortunatamente l'esempio a cui ti sei collegato non ha funzionato per me, dato che ho un livello extra in groupby! Qualcuno sa come calcolare la percentuale quando si ha a che fare con una gerarchia come la mia? –

+0

La mia risposta suggerita ha funzionato? – IanS

risposta

10

Questa domanda è un'estensione diretta di suggested duplicate. Prendendo in prestito dalla risposta accettata, questo funzionerà:

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 
Problemi correlati