2012-11-29 5 views
24

मैं निम्नलिखित DataFrame गीत नामों वाले, अपने चरम चार्ट स्थिति और हफ्तों की संख्या वे स्थिति पर खर्च किया है कोई 1:एकाधिक मानदंडों के अनुसार एक पांडस डेटाफ्रेम को कैसे क्रमबद्ध करें?

          Song   Peak   Weeks 
76       Paperback Writer    1    16 
117        Lady Madonna    1    9 
118         Hey Jude    1    27 
22       Can't Buy Me Love    1    17 
29       A Hard Day's Night    1    14 
48        Ticket To Ride    1    14 
56          Help!    1    17 
109      All You Need Is Love    1    16 
173    The Ballad Of John And Yoko    1    13 
85        Eleanor Rigby    1    14 
87       Yellow Submarine    1    14 
20     I Want To Hold Your Hand    1    24 
45         I Feel Fine    1    15 
60         Day Tripper    1    12 
61       We Can Work It Out    1    12 
10        She Loves You    1    36 
155         Get Back    1    6 
8        From Me To You    1    7 
115        Hello Goodbye    1    7 
2        Please Please Me    2    20 
92     Strawberry Fields Forever    2    12 
93         Penny Lane    2    13 
107      Magical Mystery Tour    2    16 
176         Let It Be    2    14 
0         Love Me Do    4    26 
157         Something    4    9 
166        Come Together    4    10 
58         Yesterday    8    21 
135      Back In The U.S.S.R.    19    3 
164       Here Comes The Sun    58    19 
96  Sgt. Pepper's Lonely Hearts Club Band    63    12 
105   With A Little Help From My Friends    63    7 

मैं लोकप्रियता के क्रम में इन गीतों रैंक करने के लिए चाहते हैं, इसलिए मैं डी को निम्नलिखित मानदंडों के अनुसार क्रमबद्ध करना पसंद है: उच्चतम स्थान पर पहुंचने वाले गीत पहले आते हैं, लेकिन यदि कोई टाई है, तो चार्ट में बने गीत जो सबसे लंबे समय तक आते हैं।

मुझे लगता है कि पांडों में यह कैसे करना है, यह समझ में नहीं आता है।

उत्तर

5

.sort()

df.sort(['Peak', 'Weeks'], ascending=[True, False]) 

का उपयोग कर तो चार्ट में लंबाई की कि अवरोही क्रम के भीतर चरम स्थिति के आरोही क्रम में सॉर्ट करेंगे, के द्वारा।

+0

हाँ, किसी कारण से ऐसा नहीं है। मैंने सोचा कि इसे इस तरह से काम करना चाहिए – mpjan

+0

@ user1715271 क्या आप विस्तृत कर सकते हैं? यानी - आपको वास्तव में क्या मिलता है? –

+0

इसके अलावा, 'आरोही' के लिए पैरामीटर बदलना कुछ भी नहीं बदलता है ... – mpjan

30

पांडा 0.9.1 और उच्च यह काम करना चाहिए पर (इस 0.10.0b1 साथ है):

(संपादित करें:। पांडा 0.19 के रूप में, विधि sort_index अब मान्य नहीं है पसंद करते हैं sort_values)

In [23]: songs.sort_index(by=['Peak', 'Weeks'], ascending=[True, False]) 
Out[23]: 
             Song Peak Weeks 
10       She Loves You  1  36 
118        Hey Jude  1  27 
20    I Want To Hold Your Hand  1  24 
22      Can't Buy Me Love  1  17 
56         Help!  1  17 
76      Paperback Writer  1  16 
109     All You Need Is Love  1  16 
45        I Feel Fine  1  15 
29      A Hard Day's Night  1  14 
48       Ticket To Ride  1  14 
85       Eleanor Rigby  1  14 
87      Yellow Submarine  1  14 
173   The Ballad Of John And Yoko  1  13 
60        Day Tripper  1  12 
61      We Can Work It Out  1  12 
117       Lady Madonna  1  9 
8       From Me To You  1  7 
115       Hello Goodbye  1  7 
155        Get Back  1  6 
2       Please Please Me  2  20 
107     Magical Mystery Tour  2  16 
176        Let It Be  2  14 
93        Penny Lane  2  13 
92    Strawberry Fields Forever  2  12 
0        Love Me Do  4  26 
166       Come Together  4  10 
157        Something  4  9 
58        Yesterday  8  21 
135     Back In The U.S.S.R. 19  3 
164      Here Comes The Sun 58  19 
96 Sgt. Pepper's Lonely Hearts Club Band 63  12 
105  With A Little Help From My Friends 63  7 
+2

धन्यवाद! क्या आपको पता है कि डेटाफ्रेम नए ऑर्डर के अनुसार इंडेक्स को फिर से गणना करना संभव है? (यानी डेटाफ्रेम में प्रत्येक पंक्ति से जुड़े इंडेक्स नए ऑर्डरिंग के अनुसार बढ़ता है) –

+3

यह एक पुराना सवाल है, लेकिन अगर किसी को अभी भी इसकी ज़रूरत है तो .. आप क्या चाहते हैं [pandas.DataFrame.reset_index ] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html) ('df.reset_index (ड्रॉप = सही, inplace = True) ') – robodasha

+0

सूचकांक को पुन: सम्मिलित करने का प्रयास करें सॉर्ट करने के बाद, 'df.index = range (len (df))' – visitor

18
df.sort(['Peak', 'Weeks'], ascending=[True, False], inplace=True) 

यदि आप भविष्य के उपयोग के लिए क्रमबद्ध परिणाम चाहते हैं, तो inplace=True आवश्यक है।

21

पांडा 0.17.0 के बाद से, sort बहिष्कृत है और प्रतिस्थापित sort_values द्वारा:

df.sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True) 
0

मामले में, यदि 'पीक' और 'वीक' के dtypes 'int' या 'नाव' नहीं कर रहे हैं, तो निम्न आदेश का प्रयोग करें।

df.convert_objects(convert_numeric=True).sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True)