2016-05-02 19 views
5

में मानदंडों के आधार पर एक पर्सेंट/अनुपात कुल की गणना करने के लिए पांडा में ग्रुपबी का उपयोग कैसे करें मैं एक कार्य के साथ प्रति वर्ष मूल्यों के अनुपात को काम करने के लिए पांडा में ग्रुपबी फ़ंक्शन का उपयोग करने का तरीका जानने का प्रयास कर रहा हूं हां/कोई मानदंड नहीं।किसी अन्य कॉलम

उदाहरण के लिए, मैं एक dataframe है, की सुविधा देता है यह नाम फोन:

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

और इतने पर:

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 

मैं

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

प्राप्त करने के लिए उपयोग कर सकते हैं। मैं प्रत्येक लिंग और वर्ष के लिए कुल का% दिखाने के लिए 'संख्या मानदंड' कॉलम चाहता हूं - इसलिए ऊपर 1 99 8 के लिए एन = 14507 और वाई = 2308 के बजाय मेरे पास एन = 86.27% और वाई = 13.73% होगा।

क्या कोई सलाह दे सकता है कि यह कैसे करें? अग्रिम में धन्यवाद!

+1

([GroupBy के साथ कुल की पांडा प्रतिशत] की संभावित डुप्लिकेट http://stackoverflow.com/questions/23377108/pandas-percentage-of-total-with- groupby) – IanS

+0

दुर्भाग्य से आपके द्वारा लिंक किया गया उदाहरण मेरे लिए काम नहीं करता है, क्योंकि मेरे पास समूह द्वारा अतिरिक्त परत है! क्या किसी को पता है कि मेरे जैसे पदानुक्रम से निपटने के दौरान प्रतिशत कैसे काम करना है? –

+0

क्या मेरे सुझाए गए उत्तर का काम किया? – IanS

उत्तर

10

यह प्रश्न suggested duplicate का प्रत्यक्ष विस्तार है। स्वीकार किए जाते हैं जवाब से उधार, इस काम करेगा:

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 
संबंधित मुद्दे