>>> 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()
提供了从 mergeesort
, heapsort
和
quicksort
中选择算法的一个配置。Mergesort
是唯一稳定的算法。参考以下示例代码 -
>>> unsorted_df.sort_values(by='col1' ,kind='mergesort')
col1 | col2 | |
---|---|---|
1 | 1 | 3 |
2 | 1 | 2 |
3 | 1 | 4 |
0 | 2 | 1 |