Pandas - 排序

  • 简述

    Pandas 中有两种排序方式。他们是 -
    • 按标签
    • 按值
    让我们考虑一个带有输出的示例。
    
    import pandas as pd
    import numpy as np
    unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns=['col2','col1'])
    print unsorted_df
    
    它的输出如下 -
    
            col2       col1
    1  -2.063177   0.537527
    4   0.142932  -0.684884
    6   0.012667  -0.389340
    2  -0.548797   1.848743
    3  -1.044160   0.837381
    5   0.385605   1.300185
    9   1.031425  -1.002967
    8  -0.407374  -0.435142
    0   2.237453  -1.067139
    7  -1.445831  -1.701035
    
    unsorted_df, 这labelsvalues未排序。让我们看看如何对这些进行排序。
  • 按标签

    使用sort_index()方法,通过传递轴参数和排序顺序,可以对DataFrame进行排序。默认情况下,按升序对行标签进行排序。
    
    import pandas as pd
    import numpy as np
    unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
       mns = ['col2','col1'])
    sorted_df=unsorted_df.sort_index()
    print sorted_df
    
    它的输出如下 -
    
            col2       col1
    0   0.208464   0.627037
    1   0.641004   0.331352
    2  -0.038067  -0.464730
    3  -0.638456  -0.021466
    4   0.014646  -0.737438
    5  -0.290761  -1.669827
    6  -0.797303  -0.018737
    7   0.525753   1.628921
    8  -0.567031   0.775951
    9   0.060724  -0.322425
    

    排序顺序

    通过将布尔值传递给升序参数,可以控制排序的顺序。让我们考虑以下示例来理解相同的内容。
    
    import pandas as pd
    import numpy as np
    unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
       mns = ['col2','col1'])
    sorted_df = unsorted_df.sort_index(ascending=False)
    print sorted_df
    
    它的输出如下 -
    
             col2        col1
    9    0.825697    0.374463
    8   -1.699509    0.510373
    7   -0.581378    0.622958
    6   -0.202951    0.954300
    5   -1.289321   -1.551250
    4    1.302561    0.851385
    3   -0.157915   -0.388659
    2   -1.222295    0.166609
    1    0.584890   -0.291048
    0    0.668444   -0.061294
    

    对列进行排序

    通过传递值为 0 或 1 的轴参数,可以对列标签进行排序。默认情况下,axis=0,按行排序。让我们考虑以下示例来理解相同的内容。
    
    import pandas as pd
    import numpy as np
     
    unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
       mns = ['col2','col1'])
     
    sorted_df=unsorted_df.sort_index(axis=1)
    print sorted_df
    
    它的输出如下 -
    
             col1        col2
    1   -0.291048    0.584890
    4    0.851385    1.302561
    6    0.954300   -0.202951
    2    0.166609   -1.222295
    3   -0.388659   -0.157915
    5   -1.551250   -1.289321
    9    0.374463    0.825697
    8    0.510373   -1.699509
    0   -0.061294    0.668444
    7    0.622958   -0.581378
    

    按值

    和索引排序一样,sort_values()是按值排序的方法。它接受一个 'by' 参数,该参数将使用要对值进行排序的 DataFrame 的列名。
    
    import pandas as pd
    import numpy as np
    unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
       sorted_df = unsorted_df.sort_values(by='col1')
    print sorted_df
    
    它的输出如下 -
    
       col1  col2
    1    1    3
    2    1    2
    3    1    4
    0    2    1
    
    请注意,col1 值已排序,相应的 col2 值和行索引将与 col1 一起改变。因此,它们看起来未分类。
    'by'参数采用列值列表。
    
    import pandas as pd
    import numpy as np
    unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
       sorted_df = unsorted_df.sort_values(by=['col1','col2'])
    print sorted_df
    
    它的输出如下 -
    
      col1 col2
    2   1   2
    1   1   3
    3   1   4
    0   2   1
    
  • 排序算法

    sort_values()提供了从合并排序、堆排序和快速排序中选择算法的规定。合并排序是唯一稳定的算法。
    
    import pandas as pd
    import numpy as np
    unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
    sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')
    print sorted_df
    
    它的输出如下 -
    
      col1 col2
    1    1    3
    2    1    2
    3    1    4
    0    2    1