name index iloc example data columns column python pandas

index - python loc example



¿Cómo ordenar un Pandas DataFrame según múltiples criterios? (5)

Tengo el siguiente DataFrame que contiene los nombres de las canciones, sus posiciones máximas en la tabla y el número de semanas que pasaron en la posición no 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

Me gustaría clasificar estas canciones por orden de popularidad, por lo que me gustaría clasificarlas de acuerdo con los siguientes criterios: las canciones que alcanzaron la posición más alta son lo primero, pero si hay un empate, las canciones que quedaron en las listas por lo más largo lo primero.

Parece que no puedo averiguar cómo hacer esto en Pandas.


Desde pandas 0.17.0, la sort está en desuso y reemplazada por sort_values :

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


En el caso, si los tipos de ''Pico'' y ''Semana'' no son ''int'' o ''float'', entonces use el siguiente comando.

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


En pandas 0.9.1 y superior, esto debería funcionar (esto es con 0.10.0b1):

( Edición: a partir de Pandas 0.19, el método sort_index está en desuso. Prefiere 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


Utilizando sort

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

Se clasificará en orden ascendente de posición pico, y luego dentro de ese orden de longitud descendente en los gráficos.


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

Si desea el resultado ordenado para uso futuro, se requiere inplace=True .