• pandas 排序方法: sort_index(),sort_values()


    sort_index()

    如果我们想要对行标或者列标进行字典排序(lexicographically),那么就可以使用 sort_index() 方法。

    对于 Series,当然就是根据行标 index 进行排序了:

    import numpy as np
    import pandas as pd
    
    • 1
    • 2
    s = pd.Series(range(4), index=['d', 'b', 'a', 'c'])
    s
    """
    d    0
    b    1
    a    2
    c    3
    dtype: int64
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    s.sort_index()
    """
    a    2
    b    1
    c    3
    d    0
    dtype: int64
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对于 DataFrame,我们可以对行标和列标都进行排序。默认情况下,会根据行标排序,如果将 axis 参数设置为 1,那么就会根据列标排序:

    df = pd.DataFrame(np.arange(8).reshape(2, 4),
                      index=['nine', 'four'],
                      columns=['d', 'b', 'a', 'c'])
    print(df)
    """
          d  b  a  c
    nine  0  1  2  3
    four  4  5  6  7
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    df.sort_index()
    """
          d  b  a  c
    four  4  5  6  7
    nine  0  1  2  3
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    df.sort_index(axis=1)
    """
          a  b  c  d
    nine  2  1  3  0
    four  6  5  7  4
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    默认情况下,数据是按升序排列的,如果想要降序排列,可以将 ascending 设置为 False

    df.sort_index(axis=1, ascending=False)
    """
          d  c  b  a
    nine  0  3  1  2
    four  4  7  5  6
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    sort_values()

    如果想要根据值进行排序,那么就要使用 sort_values(),值对应的 index 不会改变。

    对于 Series 来说没什么可说的,但要注意如果有缺失值,则缺失值会被排到最后:

    s1 = pd.Series([-2, 2, 12, 0])
    s1.sort_values()
    """
    0    -2
    3     0
    1     2
    2    12
    dtype: int64
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    s2 = pd.Series([-2, np.nan, 8, 0, 3, np.nan, 6])
    s2.sort_values()
    """
    0   -2.0
    3    0.0
    4    3.0
    6    6.0
    2    8.0
    1    NaN
    5    NaN
    dtype: float64
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    对于 DataFrame,我们可以根据一列或者多列来进行排序,需要将相应的列名传入 by 参数中:

    df = pd.DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})
    print(df)
    """
       b  a
    0  4  0
    1  7  1
    2 -3  0
    3  2  1
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    df.sort_values(by='b')
    """
       b  a
    2 -3  0
    3  2  1
    0  4  0
    1  7  1
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    根据多列:

    df.sort_values(by=['a', 'b'])
    """
       b  a
    2 -3  0
    0  4  0
    3  2  1
    1  7  1
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这相当于先根据 column b 排序,再根据 column a 进行排序,所以等价于下面的语句:

    df.sort_values(by='b').sort_values(by='a')
    
    • 1

    References

    Python for Data Analysis, 2 n d ^{\rm nd} nd edition. Wes McKinney.

  • 相关阅读:
    秋染田野稻菽飘香 国稻种芯·中国水稻节:河北各地农业丰收
    读书记:认知觉醒(二)模糊、感性
    线性代数笔记
    008_第一代软件系统架构
    SpringMVC之JSON数据返回&异常处理机制
    MLX90640 开发 微型红外成像仪
    恢复受感染的数据:如何应对.360勒索病毒的策略
    【Java SE】SE“细节”知识大总结
    Windows11不插耳机、音箱提示无法找到输出设备的问题解决方法
    【文末附gpt升级秘笈】AI热潮降温与AGI场景普及的局限性
  • 原文地址:https://blog.csdn.net/myDarling_/article/details/128044289