对Pandas数据框架的行进行排序

  • Post category:Python

对 Pandas 数据框架的行进行排序可以使用 sort_values() 函数。以下是对该函数的详细说明:

sort_values函数的基本语法

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

sort_values函数的参数说明

  • by:按照某一列或多列排序。可以是列名称(字符串类型),也可以是列表或 Series、DataFrame。
  • axis:指定排序的轴,默认为 0,即按照行进行排序,如果设置为 1,则按照列进行排序。
  • ascending:排序方式,默认为升序,即 True 表示升序排序,False 表示降序排序。
  • inplace:是否原地修改数据,默认为 False,表示不修改原数据,返回新的数据。如果为 True,表示将修改后的结果保存到原数据上,并返回 None。
  • kind:排序算法,默认为 quicksort,还可以使用 mergesort 或 heapsort。
  • na_position:缺失值在排序中的位置,默认为 last,表示在排序后将缺失值移动到末尾,也可以选择 first,表示将缺失值移动到最前面。
  • ignore_index:是否忽略掉原有索引,默认为 False,表示保留原有索引。

sort_values函数的使用示例

我们可以使用以下的数据集作为示例:

import pandas as pd

# 创建一个DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva', 'Frank'],
    'Age': [26, 27, 25, 29, 32, 24],
    'Gender': ['Female', 'Male', 'Female', 'Male', 'Female', 'Male'],
    'Salary': [4000.0, 3500.0, 4300.0, 4600.0, 5000.0, 3000.0]
})

# 打印DataFrame
print(df)

输出结果如下:

    Name  Age  Gender  Salary
0  Alice   26  Female  4000.0
1    Bob   27    Male  3500.0
2  Cathy   25  Female  4300.0
3  David   29    Male  4600.0
4    Eva   32  Female  5000.0
5  Frank   24    Male  3000.0

按照一列进行升序排序

我们可以按照 Salary 这一列进行升序排序:

# 按照Salary这一列进行升序排序
df.sort_values(by=['Salary'], ascending=True, inplace=True)

# 打印排序后的数据
print(df)

输出结果如下:

    Name  Age  Gender  Salary
5  Frank   24    Male  3000.0
1    Bob   27    Male  3500.0
0  Alice   26  Female  4000.0
2  Cathy   25  Female  4300.0
3  David   29    Male  4600.0
4    Eva   32  Female  5000.0

按照多列进行排序

我们可以按照 SalaryAge 这两列进行排序,先按照 Salary 进行升序排序,再按照 Age 进行升序排序:

# 按照Salary和Age这两列进行排序
df.sort_values(by=['Salary', 'Age'], ascending=[True, True], inplace=True)

# 打印排序后的数据
print(df)

输出结果如下:

    Name  Age  Gender  Salary
5  Frank   24    Male  3000.0
1    Bob   27    Male  3500.0
0  Alice   26  Female  4000.0
2  Cathy   25  Female  4300.0
3  David   29    Male  4600.0
4    Eva   32  Female  5000.0

按照多列进行排序,并忽略原有索引

我们可以按照 SalaryAge 这两列进行排序,先按照 Salary 进行升序排序,再按照 Age 进行升序排序,并忽略原有索引:

# 按照Salary和Age这两列进行排序,并忽略原有索引
df = df.sort_values(by=['Salary', 'Age'], ascending=[True, True], ignore_index=True)

# 打印排序后的数据
print(df)

输出结果如下:

    Name  Age  Gender  Salary
0  Frank   24    Male  3000.0
1    Bob   27    Male  3500.0
2  Alice   26  Female  4000.0
3  Cathy   25  Female  4300.0
4  David   29    Male  4600.0
5    Eva   32  Female  5000.0