2014-07-09 13 views
5

के मानों के ग्रुपबी दिए गए प्रतिशत, कल्पना कीजिए कि मेरे पास DataFrame कॉलम हैं जिनमें केवल वास्तविक मान हैं।चयनित डेटाफ्रेम कॉलम

>> df   
      col1 col2  col3 
0  0.907609  82 4.207991 
1  3.743659 1523 6.488842 
2  2.358696 324 5.092592 
3  0.006793  0 0.000000 
4 19.319746 11969 7.405685 

मैं समूह यह चतुर्थकों (या किसी अन्य प्रतिशतक मुझे द्वारा निर्दिष्ट) चुने हुए स्तंभ के द्वारा करना चाहते हैं (उदाहरण के लिए, col1) कुछ कार्यों इन समूहों पर प्रदर्शन करने के लिए। आदर्श रूप में, मैं की तरह कुछ करना चाहते हैं:

df.groupy(quartiles_of_col1).mean() # not working, how to code quartiles_of_col1? 

उत्पादन col1 की चतुर्थकों करने के लिए इसी चार समूहों के लिए कॉलम में से प्रत्येक के मतलब देना चाहिए। क्या यह groupby कमांड के साथ संभव है? इसे प्राप्त करने का सबसे आसान तरीका क्या है?

उत्तर

7

प्रिंट होगा के लिए यह काम करेंगे मैं अभी यह परीक्षण करने के लिए एक कंप्यूटर की जरूरत नहीं है, लेकिन मुझे लगता है कि आप से यह कर सकते हैं : df.groupby(pd.cut(df.col0, np.percentile(df.col0, [0, 25, 75, 90, 100]), include_lowest=True)).mean()। 150mins के बाद अद्यतन होगा।

कुछ स्पष्टीकरण:

In [42]: 
#use np.percentile to get the bin edges of any percentile you want 
np.percentile(df.col0, [0, 25, 75, 90, 100]) 
Out[42]: 
[0.0067930000000000004, 
0.907609, 
3.7436589999999996, 
13.089311200000001, 
19.319745999999999] 
In [43]: 
#Need to use include_lowest=True 
print df.groupby(pd.cut(df.col0, np.percentile(df.col0, [0, 25, 75, 90, 100]), include_lowest=True)).mean() 
         col0  col1  col2 
col0           
[0.00679, 0.908] 0.457201  41.0 2.103996 
(0.908, 3.744]  3.051177 923.5 5.790717 
(3.744, 13.0893]  NaN  NaN  NaN 
(13.0893, 19.32] 19.319746 11969.0 7.405685 
In [44]: 
#Or the smallest values will be skiped 
print df.groupby(pd.cut(df.col0, np.percentile(df.col0, [0, 25, 75, 90, 100]))).mean() 
         col0  col1  col2 
col0           
(0.00679, 0.908] 0.907609  82.0 4.207991 
(0.908, 3.744]  3.051177 923.5 5.790717 
(3.744, 13.0893]  NaN  NaN  NaN 
(13.0893, 19.32] 19.319746 11969.0 7.405685 
+2

यह मेरे लिए काम करता है! कट का शानदार उपयोग! धन्यवाद चैंप – biobirdman

+1

उदाहरण जोड़ा गया। बाहर निकलता है आप 'include_lowest' को 'True' होने के लिए भी सेट करना चाहते हैं, अन्यथा छोटी संख्याएं छोड़ी जाएंगी। संपादित। चीयर्स! –

0

मुझे आशा है कि इससे आपकी समस्या हल हो जाएगी। यह बहुत नहीं है, लेकिन मुझे आशा है कि आप

import pandas as pd 
    import random 
    import numpy as np 
    ## create a mock df as example. with column A, B, C and D 
    df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD')) 

    ## select dataframe based on the quantile of column A, using the quantile method. 
    df[df['A'] < df['A'].quantile(0.3)].mean() 

इस

A -1.157615 
B 0.205529 
C -0.108263 
D 0.346752 
dtype: float64 
+0

खैर, यह एक प्रतिशतक के लिए ठीक है, लेकिन मैं विशेष रूप से खोज कर रहा हूँ एक ऐसे समाधान के लिए जो प्रतिशत/'q'-quantiles द्वारा परिभाषित प्रत्येक समूह के लिए 'माध्य'' प्राप्त करेगा। – pms

+0

लूप के लिए कैसे करना है जो मात्रात्मक मूल्य को प्रतिस्थापित करता है? – biobirdman

+0

हां, यह एक संभावना है, लेकिन यह सुरुचिपूर्ण और न ही कुशल है। कल्पना करें कि आपके पास एक बड़ा डीएफ है और आप इसे 10-कंटेंट में विभाजित करना चाहते हैं। लूप करने का मतलब यह होगा कि आप अपने डेटा को समूहित करने के लिए डीएफ पर 10 बार जाते हैं। – pms

संबंधित मुद्दे