按升序排列pandas数据矩阵

2 投票
2 回答
8161 浏览
提问于 2025-04-16 15:09

pandas库中的DataFrame对象有一个排序方法,但是DataMatrix对象没有。

那么,如何才能按索引(也就是日期这一列)将这个DataMatrix对象按升序排序呢?

>>> dm
               compound_ret
2/16/2011 0:00  0.006275682
2/15/2011 0:00  0.003098208
2/14/2011 0:00  0.0055039
2/13/2011 0:00  0.011471506
2/12/2011 0:00  0.011853712
2/11/2011 0:00  0.009558739
2/10/2011 0:00  0.014127912
2/9/2011 0:00   0.02042923
2/8/2011 0:00   0.023308062

排序后的结果应该是,2/8/2011作为第一条记录,2/16/2011作为最后一条记录。compound_ret这一列的内容也应该跟着日期一起排序。所以,结果大概应该是这样的:

>>>dm_sorted
                  compound_ret
2/8/2011 0:00    0.023308062
2/9/2011 0:00    0.02042923
2/10/2011 0:00  0.014127912
2/11/2011 0:00  0.009558739
2/12/2011 0:00  0.011853712
2/13/2011 0:00  0.011471506
2/14/2011 0:00  0.0055039
2/15/2011 0:00  0.003098208
2/16/2011 0:00  0.006275682

2 个回答

0

你试过吗?至少在我用的那个版本的pandas里,DataMatrix是从DataFrame这个类继承过来的。

>>> type(dm)
<class 'pandas.core.matrix.DataMatrix'>
>>> dm.sort()
                       compound_ret    
2011-02-08 00:00:00   -0.6986         
2011-02-09 00:00:00    0.1846         
2011-02-10 00:00:00    0.2312         
2011-02-11 00:00:00    1.844          
2011-02-12 00:00:00    0.3662         
2011-02-13 00:00:00    0.1331         
2011-02-14 00:00:00    0.5166         
2011-02-15 00:00:00    1.37           
2011-02-16 00:00:00    0.9346         

>>> dm.sort(ascending=False)                                                    
                       compound_ret    
2011-02-16 00:00:00    0.9346         
2011-02-15 00:00:00    1.37           
2011-02-14 00:00:00    0.5166         
2011-02-13 00:00:00    0.1331         
2011-02-12 00:00:00    0.3662         
2011-02-11 00:00:00    1.844          
2011-02-10 00:00:00    0.2312         
2011-02-09 00:00:00    0.1846         
2011-02-08 00:00:00   -0.6986         
8

确实,在0.2和0.3之间,我把sortUpsortDown这两个方法改成了一个叫sort的方法。对此我很抱歉。

如果可以的话,我强烈建议你关注pandas的最新版本(https://github.com/wesm/pandas)!另外,考虑在所有互动工作中使用IPython(http://ipython.scipy.org)——我发现使用它可以方便地完成代码补全和查看对象信息,这对寻找方法和查看文档说明非常有帮助。

撰写回答