首页 > 解决方案 > 熊猫按每一行排序

问题描述

Date        Count_Doc   Sum_Words   S&P 500     Russel 2000  Nasdaq     
2017-02-16  0.069946    3.839240    -0.568454   -0.514334   -0.592410
2017-04-12  1.655428    3.667811    -0.891697   -1.450381   -1.047976
2017-04-19  2.371889    2.110689    -0.284174   0.401092    0.427705
2017-04-20  3.261538    2.995514    1.846039    1.360092    1.660339
2017-05-02  0.738549    2.197852    0.081593    -0.849580   -0.231491

我想保持“Count_Doc”和“Sum_Words”列不变,但我正在尝试对其余列进行排序,如下所示:(顺序未排序,只是随机排列)

Date        Count_Doc   Sum_Words   1st         2nd         3rd
2017-02-16  0.069946    3.839240    S&P 500     Nasdaq      Russel 2000
2017-04-12  1.655428    3.667811    Nasdaq      S&P 500     Russel 2000
2017-04-19  2.371889    2.110689    Nasdaq      S&P 500     Russel 2000
2017-04-20  3.261538    2.995514    Russel 2000 Nasdaq      S&P 500 
2017-05-02  0.738549    2.197852    Russel 2000 S&P 500     Nasdaq  

有没有办法将列的名称作为 DataFrame 值返回?

谢谢!

标签: pythonpandas

解决方案


用这个:

df = df.set_index(['Date','Count_Doc','Sum_Words'])
df_out = pd.DataFrame(df.columns[df.values.argsort(1)[::-1]].values, 
                       df.index, 
                       columns=['1st','2nd','3rd']).reset_index()
df_out

输出:

         Date  Count_Doc  Sum_Words          1st          2nd          3rd
0  2017-02-16   0.069946   3.839240  Russel 2000       Nasdaq      S&P 500
1  2017-04-12   1.655428   3.667811  Russel 2000       Nasdaq      S&P 500
2  2017-04-19   2.371889   2.110689      S&P 500  Russel 2000       Nasdaq
3  2017-04-20   3.261538   2.995514  Russel 2000       Nasdaq      S&P 500
4  2017-05-02   0.738549   2.197852       Nasdaq      S&P 500  Russel 2000

推荐阅读