我有以下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
我想按照受欢迎的顺序对这些歌曲进行排名,所以我想根据以下标准对它们进行排序:达到最高位置的歌曲排在第一位,但如果有一个平局,那么剩下的歌曲在最长的图表中排在第一位。
我似乎无法弄清楚如何在熊猫中做到这一点。
答案 0 :(得分:30)
在pandas 0.9.1及更高版本上,这应该可行(这是0.10.0b1):
(编辑:截至Pandas 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
答案 1 :(得分:22)
由于pandas为0.17.0,sort
已被弃用并被sort_values
取代:
df.sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True)
答案 2 :(得分:18)
df.sort(['Peak', 'Weeks'], ascending=[True, False], inplace=True)
如果您希望将排序结果供将来使用,则需要inplace=True
。
答案 3 :(得分:5)
答案 4 :(得分:0)
如果'Peak'和'Week'的dtypes不是'int'或'float',请使用以下命令。
df.convert_objects(convert_numeric=True).sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True)
答案 5 :(得分:0)
pandas.DataFrame.sort_values df.sort_values(['峰值', '周'], 升序=[真, 假])
请在
上找到有关此的更多详细信息