2016-05-02 47 views
5

Verilen değerlerle yıl başına oranların hesaplanması için panda grup işlevinin nasıl kullanılacağını öğrenmek için çalışıyorum Evet/Hayır kriterleri.Başka bir sütundaki bir ölçüt temelinde bir perctentage/orantı toplamını hesaplamak için pandalarda groupby nasıl kullanılır?

Örneğin, ben bir dataframe var, o lakap sağlar: vb

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

ve:

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 

Ben

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

almak için kullanabilirsiniz. Her bir cinsiyet ve yıl için toplamın% 'sini göstermek için' Sayı Ölçütleri 'sütunu istiyorum. Bu nedenle, 1998 yılı için N = 14507 ve Y = 2308 yerine N =% 86.27 ve Y =% 13.73 olacaktı.

Bunu nasıl yapacaklarını öneren herhangi biri var mı? Şimdiden teşekkürler!

+1

([GroupBy ile toplamın Pandalar yüzdesi] Olası yinelenen http://stackoverflow.com/questions/23377108/pandas-percentage-of-total-with- groupby) – IanS

+0

Maalesef bağlandığınız örnek, benim için çalışmadı çünkü grupta fazladan bir katmam var! Benimki gibi bir hiyerarşi ile uğraşırken yüzdesini nasıl bilen var mı? –

+0

Önerilen yanıtım işe yaradı mı? – IanS

cevap

10

Bu soru, suggested duplicate dosyasının doğrudan uzantısıdır. kabul edilen yanıt borç, işe yarayacak:

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