2012-11-29 94 views
24

我有一個包含歌曲名稱下面的數據幀,其鼎盛時期的排行榜位置,他們在位置花了幾個星期的數量沒有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 

我想普及程度順序對這些歌曲,所以我d喜歡根據以下標準對它們進行排序:達到最高排名的歌曲排在第一位,但如果排在一起,那麼排在最長位置的歌曲會排在第一位。

我似乎無法弄清楚如何在熊貓中做到這一點。

回答

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(drop = True,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) 
相關問題