2013-07-10 7 views
12

मैं पांडा 'एजीजी() फ़ंक्शन के माध्यम से numpy प्रतिशत() फ़ंक्शन को पास करना चाहता हूं जैसा कि मैं नीचे कई अन्य आंकड़े कार्यों के साथ करता हूं।पास प्रतिशत को पांडा एजीजी फ़ंक्शन

अभी मैं एक dataframe है कि इस तरह दिखता है:

AGGREGATE MY_COLUMN 
A   10 
A   12 
B   5 
B   9 
A   84 
B   22 

और मेरे कोड इस तरह दिखता है:

grouped = dataframe.groupby('AGGREGATE') 
column = grouped['MY_COLUMN'] 
column.agg([np.sum, np.mean, np.std, np.median, np.var, np.min, np.max]) 

ऊपर कोड काम करता है, लेकिन मैं

की तरह कुछ करना चाहता हूँ
column.agg([np.sum, np.mean, np.percentile(50), np.percentile(95)]) 

यानी एजीजी()

से वापस आने के लिए विभिन्न प्रतिशत निर्दिष्ट करें

यह कैसे किया जाना चाहिए?

+2

यह शायद पांडा के एक नए पहलू है लेकिन http://stackoverflow.com/questions/19894939/calculate-arbitrary-percentile- को देखो ऑन-पांडा-GroupBy। टीएलडीआर: df.groupby ('सी')। क्वांटाइल (.95) –

उत्तर

29

शायद सुपर कुशल नहीं है, लेकिन एक तरह से एक समारोह अपने आप को बनाने के लिए किया जाएगा:

def percentile(n): 
    def percentile_(x): 
     return np.percentile(x, n) 
    percentile_.__name__ = 'percentile_%s' % n 
    return percentile_ 

फिर अपनी agg में शामिल हैं: यकीन है कि यह है

In [11]: column.agg([np.sum, np.mean, np.std, np.median, 
        np.var, np.min, np.max, percentile(50), percentile(95)]) 
Out[11]: 
      sum  mean  std median   var amin amax percentile_50 percentile_95 
AGGREGATE 
A   106 35.333333 42.158431  12 1777.333333 10 84    12   76.8 
B   36 12.000000 8.888194  9 79.000000  5 22    12   76.8 

नोट यह कैसे चाहिए हालांकि किया जा सकता है ...

+0

जो अच्छा लग रहा है ..... कृपया – Jeff

+0

सुनिश्चित करने के लिए कुकबुक में जोड़ें, सप्ताह में बाद में कुकबुक के माध्यम से जाएंगे और कुछ जोड़ देंगे अन्य शामिल हैं। –

+1

वास्तव में .... शायद '' Series.describe'' '' quantiles'' arg लेना चाहिए? (और 'centile_width'' से छुटकारा पाएं) जो एक सूची ले सकता है, उदा। '' .describe (quantiles [50,95]) ''? – Jeff

3

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

dataframe.groupby('AGGREGATE').agg(lambda x: np.percentile(x['COL'], q = 95)) 

तुम भी एक चर को यह फ़ंक्शन असाइन और अन्य एकत्रीकरण कार्यों के साथ संयोजन के रूप में उपयोग कर सकते हैं।

1

50% और 95% प्रतिशतक के लिए इस प्रयास करें:

column.describe(percentiles = [ 0.5, 0.95 ]) 
संबंधित मुद्दे