目录

上一个主题

6. Pandas 第二部分

下一个主题

6.2. Pandas字符串和文本数据


>>> from env_helper import info; info()
页面更新时间: 2023-04-15 22:06:11
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-7-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

6.1. 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],columns=['col2','col1'])
>>> unsorted_df
col2 col1
1 0.455547 0.019359
4 -0.988132 0.593971
6 -0.681986 -0.394894
2 0.818921 2.494349
3 1.937521 1.299599
5 0.255983 0.469643
9 0.606398 -1.917897
8 -0.946286 -0.270040
0 -1.311374 -0.108536
7 -0.881904 2.035360

unsorted_df 数据值中,标签和值未排序。下面来看看如何按标签来排序。

按标签排序

使用 sort_index() 方法,通过传递 axis 参数和排序顺序,可以对DataFrame进行排序。 默认情况下,按照升序对行标签进行排序。

>>> unsorted_df.sort_index()
col2 col1
0 -1.311374 -0.108536
1 0.455547 0.019359
2 0.818921 2.494349
3 1.937521 1.299599
4 -0.988132 0.593971
5 0.255983 0.469643
6 -0.681986 -0.394894
7 -0.881904 2.035360
8 -0.946286 -0.270040
9 0.606398 -1.917897

排序顺序

通过将布尔值传递给升序参数,可以控制排序顺序。 来看看下面的例子来理解一下。

>>> unsorted_df.sort_index(ascending=False)
col2 col1
9 0.606398 -1.917897
8 -0.946286 -0.270040
7 -0.881904 2.035360
6 -0.681986 -0.394894
5 0.255983 0.469643
4 -0.988132 0.593971
3 1.937521 1.299599
2 0.818921 2.494349
1 0.455547 0.019359
0 -1.311374 -0.108536

按列排列

通过传递axis参数值为0或1,可以对列标签进行排序。 默认情况下, axis = 0 ,逐行排列。来看看下面的例子来理解这个概念。

>>> unsorted_df.sort_index(axis=1)
col1 col2
1 0.019359 0.455547
4 0.593971 -0.988132
6 -0.394894 -0.681986
2 2.494349 0.818921
3 1.299599 1.937521
5 0.469643 0.255983
9 -1.917897 0.606398
8 -0.270040 -0.946286
0 -0.108536 -1.311374
7 2.035360 -0.881904

按值排序

像索引排序一样,sort_values()是按值排序的方法。它接受一个by参数,它将使用要与其排序值的DataFrame的列名称。

>>> unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
>>> unsorted_df.sort_values(by='col1')
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1

注意: 观察上面的输出结果,col1值被排序,相应的col2值和行索引将随col1一起改变。因此,它们看起来没有排序。

通过 by 参数指定需要列值,参考以下示例代码 -

>>> unsorted_df.sort_values(by=['col1','col2'])
col1 col2
2 1 2
1 1 3
3 1 4
0 2 1

排序算法

sort_values() 提供了从 mergeesortheapsortquicksort 中选择算法的一个配置。Mergesort 是唯一稳定的算法。参考以下示例代码 -

>>> unsorted_df.sort_values(by='col1' ,kind='mergesort')
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1