pandas按照列的值排序(某一列或者多列)

  • Post category:Python

Pandas是一种常用的数据处理库,可以对数据进行各种操作,其数据排序功能在数据处理过程中十分常用。下面我将详细讲解如何使用 Pandas 进行数据排序,并提供两个实际案例。

Pandas排序的基础用法

在 Pandas 中,可以使用 sort_values() 函数进行排序,默认按照升序排序。基本的语法和参数如下:

df.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

参数说明:

  • by:用于排序的列或者列的列表。如果是多列,需要使用列表进行传递。
  • axis:指定按照行还是列进行排序,默认为按照行进行排序。
  • ascending:指定是否升序排序,默认为 True,即升序排序。
  • inplace:是否在原 DataFrame 上进行修改,默认为 False。如果为 True,则在原 DataFrame 上进行修改。
  • kind:指定排序算法,值为 quicksortmergesortheapsort 中的一个,默认是 quicksort
  • na_position:缺失值的处理方式,值为 lastfirst。默认是 last,代表将缺失值放到末尾。

Pandas按照指定列排序

下面的示例使用的是 Kaggle 平台上 Iris 数据集,首先读取数据:

import pandas as pd

data = pd.read_csv('/kaggle/input/iris/Iris.csv')

查看数据集:

data.head()

输出:

   Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm      Species
0   1            5.1           3.5            1.4           0.2  Iris-setosa
1   2            4.9           3.0            1.4           0.2  Iris-setosa
2   3            4.7           3.2            1.3           0.2  Iris-setosa
3   4            4.6           3.1            1.5           0.2  Iris-setosa
4   5            5.0           3.6            1.4           0.2  Iris-setosa

我们可以根据 SepalLengthCm 列的数据进行升序或降序排序。首先根据 SepalLengthCm 列进行升序排序:

data.sort_values(by='SepalLengthCm')

输出:

      Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm          Species
13    14            4.3           3.0            1.1           0.1      Iris-setosa
42    43            4.4           3.2            1.3           0.2      Iris-setosa
38    39            4.4           3.0            1.3           0.2      Iris-setosa
8      9            4.4           2.9            1.4           0.2      Iris-setosa
41    42            4.5           2.3            1.3           0.3      Iris-setosa
..   ...            ...           ...            ...           ...              ...
122  123            7.7           2.8            6.7           2.0   Iris-virginica
118  119            7.7           2.6            6.9           2.3   Iris-virginica
135  136            7.7           3.0            6.1           2.3   Iris-virginica
131  132            7.9           3.8            6.4           2.0   Iris-virginica
117  118            7.9           3.8            6.7           2.2   Iris-virginica

[150 rows x 6 columns]

然后根据 SepalLengthCm 列进行降序排序:

data.sort_values(by='SepalLengthCm', ascending=False)

输出:

      Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm          Species
131  132            7.9           3.8            6.4           2.0   Iris-virginica
117  118            7.9           3.8            6.7           2.2   Iris-virginica
118  119            7.7           2.6            6.9           2.3   Iris-virginica
122  123            7.7           2.8            6.7           2.0   Iris-virginica
105  106            7.6           3.0            6.6           2.1   Iris-virginica
..   ...            ...           ...            ...           ...              ...
41    42            4.5           2.3            1.3           0.3      Iris-setosa
8      9            4.4           2.9            1.4           0.2      Iris-setosa
38    39            4.4           3.0            1.3           0.2      Iris-setosa
42    43            4.4           3.2            1.3           0.2      Iris-setosa
13    14            4.3           3.0            1.1           0.1      Iris-setosa

[150 rows x 6 columns]

Pandas按照多个列排序

如果希望按照多个列进行排序,可以将列名放在一个列表中进行传递。下面的示例按照 SepalLengthCm 和 SepalWidthCm 两列进行排序。

data.sort_values(by=['SepalLengthCm', 'SepalWidthCm'])

输出:

      Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm          Species
13    14            4.3           3.0            1.1           0.1      Iris-setosa
42    43            4.4           3.2            1.3           0.2      Iris-setosa
8      9            4.4           2.9            1.4           0.2      Iris-setosa
38    39            4.4           3.0            1.3           0.2      Iris-setosa
41    42            4.5           2.3            1.3           0.3      Iris-setosa
..   ...            ...           ...            ...           ...              ...
131  132            7.9           3.8            6.4           2.0   Iris-virginica
117  118            7.9           3.8            6.7           2.2   Iris-virginica
122  123            7.7           2.8            6.7           2.0   Iris-virginica
135  136            7.7           3.0            6.1           2.3   Iris-virginica
131  132            7.9           3.8            6.4           2.0   Iris-virginica

[150 rows x 6 columns]

从上述示例可以看出,按照多列排序时,前一列排序相同的行在后一列排序时会按照前一列的顺序进行排列。

综上所述,通过以上两个实际案例我们详细讲解了 Pandas 如何进行单列或多列排序,你可以根据实际需求使用 Pandas 完成数据排序操作。