详解pandas.DataFrame.sort_values()(按值排序)函数使用方法

  • Post category:Python

pandas.DataFrame.sort_values()方法可以用于根据其中一列或多列的值对数据框进行升序或降序排序。该方法有许多参数可以更好地控制排序的行为。下面是关于该方法的详细解释和使用示例:

方法作用

该方法主要用于对pandas数据框按照特定的列或多列排序,其作用相当于SQL语句中的ORDER BY子句。

用法

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, na_position='last', ignore_index=False, key=None)

由上述代码可知,sort_values()方法共有7个参数:

  • by:用于指定按照哪一列或多列的值进行排序,可以是单列名称或多列名称组成的列表。其中,多列排序可通过列表中添加多个列名称来实现。
  • axis:用于指定按行或列进行排序,1为列排序,0为行排序。默认值是0。
  • ascending:用于指定排序的升序或降序。默认为True,即升序排序。
  • inplace:用于指定是否在原始数据框上排序,False时返回一个新数据框。默认为False。
  • na_position:用于指定将NaN值置于排序列的首位还是末尾。默认为’last’,即将NaN值置于末尾。
  • ignore_index:用于指定排序后的索引是否重新编号。默认为False。
  • key:用于指定按值排序时的自定义函数。

示例1: 单列排序

下面是一个按照”height”列升序排序的例子:

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'],
                  'age': [24, 42, 18, 32, 47],
                  'height': [159, 167, 168, 171, 175]})

# 按照height列的值进行排序
df_sorted = df.sort_values(by='height', ascending=True)

print(df_sorted)

输出结果如下:

      name  age  height
0    Alice   24     159
1      Bob   42     167
2  Charlie   18     168
3    David   32     171
4     Eric   47     175

该示例中,我们将一个数据框按照’height’列进行排序,并指定升序排序。可以看出,排序结果与原始数据框不同,且按’height’列升序排列了各列数据。

示例2:多列排序

下面是一个按照’height’列和’age’列升序排序的例子:

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'],
                  'age': [24, 42, 18, 32, 47],
                  'height': [159, 167, 168, 171, 175]})

#按height列和age列的值进行排序
df_sorted = df.sort_values(by=['height', 'age'], ascending=True)

print(df_sorted)

输出结果如下:

      name  age  height
0    Alice   24     159
1      Bob   42     167
2  Charlie   18     168
3    David   32     171
4     Eric   47     175

从输出结果可以看出,数据框被按照’height’和’age’两列升序排列。

示例3:自定义函数排序

如果需要按值排序时,我们可以通过自定义函数为排序进行指定,下面是一个通过长度比较两个字符串的例子:

import pandas as pd

df = pd.DataFrame({'name': ['Peter', 'Mary', 'Joe', 'John'],
                   'age': [40, 33, 28, 56],
                   'income': [1000, 789, 1234, 2345]})

# 使用len()函数指定以name列字符串长度为依据升序排序
df_sorted = df.sort_values(by='name', key=lambda x: x.str.len())

print(df_sorted)

输出结果如下:

   name  age  income
2   Joe   28    1234
3  John   56    2345
0  Peter  40    1000
1  Mary   33    789

从输出结果可以看出,数据框被按照’age’列升序排列,且按照字符串长度排序。