2012-11-29 14 views
24

は、私は、次のデータフレームの楽曲名を含む、それらのピークチャートの位置と、彼らは位置で過ごした週数を持っていない1:複数の基準に基づいてPandas DataFrameを並べ替える方法は?

          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 

私は人気のためにこれらの曲をランク付けしたいと思いますので、私は」最高位に達した曲が最初に来ますが、同調している場合は、最も長い間チャートに残っている曲が最初に来ます。

私はパンダでこれを行う方法を理解できないようです。次にチャートの長さの降順内、ピーク位置の昇順にソートされます.sort()

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

を使用することにより

答えて

5

これは動作するはずパンダ0.9.1以降で
+0

はい、そうではありません。私はそれもそのように動作するはずだと思った – mpjan

+0

@ user1715271あなたは精巧にできますか?つまり、実際に何を得ますか? –

+0

また、 '昇順'のパラメータを変更しても何も変更されません。 – mpjan

30

(これは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が必要です。パンダ0.17.0ので

21

sortsort_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) 
関連する問題