Python 如何根据多个条件对数据帧进行排序?
我有以下数据框,其中包含歌曲名称、它们在排行榜上的位置以及它们在排名第一的位置上度过的周数:Python 如何根据多个条件对数据帧进行排序?,python,pandas,Python,Pandas,我有以下数据框,其中包含歌曲名称、它们在排行榜上的位置以及它们在排名第一的位置上度过的周数: Song Peak Weeks 76 Paperback Writer 1 16 117 Lady Mado
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.9.1及更高版本,这应该可以工作(对于0.10.0b1): (Edit:从0.19开始,方法
sort\u index
已被弃用。首选)
如果希望排序结果供将来使用,则需要使用inplace=True
。自pandas 0.17.0以来,已弃用并替换为:
在这种情况下,如果'Peak'和'Week'的数据类型不是'int'或'float',则使用以下命令
df.convert_objects(convert_numeric=True).sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True)
pandas.DataFrame.sort_值 排序_值(['Peak','Weeks',],升序=[True,False])
请在上查找有关此的更多详细信息是的,出于某种原因,情况并非如此。我想应该是这样的too@user1715271你能详细说明一下吗?ie-您实际得到了什么?@user1715271您正在查看排序返回的数据帧对象,对吗?除非将
inplace=True
传递给排序,否则不会更改原始值……第二个条件仍然会按降序对“Peak”列中的关系进行排序order@user1715271“仍然按降序排列“峰值”列中的领带”-呃-这就是你想要的,不是吗?谢谢!您知道是否有可能让数据帧根据新的顺序重新计算索引吗?(也就是说,与数据帧中每一行相关联的索引都会根据新的顺序增长)这是一个老问题,但以防有人仍然需要它。。您可以使用(trydf.reset_index(drop=True,inplace=True)
)在排序后重新计算索引,在0.22.0sort_index
中,trydf.index=range(len(df))
仍然可用,但未标记为已弃用。
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
df.sort(['Peak', 'Weeks'], ascending=[True, False], inplace=True)
df.sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True)
df.convert_objects(convert_numeric=True).sort_values(['Peak', 'Weeks'], ascending=[True, False], inplace=True)