2012-11-29 95 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) 
相关问题