Pandas DataFrame DataFrame.sort_values() 函数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.sort_values() 语法
  2. 示例代码:使用 Pandas 对 DataFrame 进行排序 pandas.DataFrame.sort_values() 基于单列进行排序
  3. 示例代码:使用 Pandas DataFrame.sort_values() 基于多列对 DataFrame 进行排序
  4. 示例代码:用 Pandas DataFrame.sort_values() 对 DataFrame 进行降序排序
  5. 示例代码:使用 Pandas DataFrame.sort_values() 对 DataFrame 进行排序,将 NaN 放在开头
Pandas DataFrame DataFrame.sort_values() 函数

Pandas DataFrame.sort_values() 方法将调用者 DataFrame 沿任一索引的指定列中的值按升序或降序排序。

pandas.DataFrame.sort_values() 语法

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

参数

by 要排序的名称或名称列表
axis 沿行(axis=0)或列(axis=1)排序
ascending 按升序排序(ascending=True)或降序排序(ascending=False)
inplace 布尔型。如果为 True,就地修改调用者 DataFrame
kind 排序算法。默认为 quicksort
na_position NaN 值放在开头(na_position=first)或结尾(na_position=last)
ignore_index 布尔型。如果是 True,则忽略原始 DataFrame 中的索引,默认值是 False,即使用索引。默认值是 False,表示使用索引。
1.0.0 版本新增

返回值

如果 inplaceTrue,则返回排序后的 DataFrame;否则为 None

示例代码:使用 Pandas 对 DataFrame 进行排序 pandas.DataFrame.sort_values() 基于单列进行排序

import pandas as pd

dates=['April-10', 
       'April-11', 
       'April-12', 
       'April-13',
       'April-14',
       'April-16']
sales=[200,300,400,200,300,300]
prices=[3, 1, 2, 4,3,2]

df = pd.DataFrame({'Date':dates ,
                   'Sales':sales ,
                   'Price': prices})
print("Before Sorting:")
print(df)
sorted_df=df.sort_values(by=['Price'])
print("After Sorting:")
print(sorted_df)

输出:

Before Sorting:
       Date  Sales  Price
0  April-10    200      3
1  April-11    300      1
2  April-12    400      2
3  April-13    200      4
4  April-14    300      3
5  April-16    300      2
After Sorting:
       Date  Sales  Price
       Date  Sales  Price
1  April-11    300      1
2  April-12    400      2
5  April-16    300      2
0  April-10    200      3
4  April-14    300      3
3  April-13    200      4

它根据 Price 列中的值按升序(默认)对 DataFrame df 进行排序。

排序后的 DataFrame 中的索引与原始 DataFrame 中的索引保持一致。

如果你喜欢在排序后的 DataFrame 中使用新的索引列,那么你可以设置 ignore_index(从 1.0.0 版本引入)为 True

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
print("Before Sorting:")
print(df)
sorted_df = df.sort_values(by=["Price"], ignore_index=True)
print("After Sorting:")

输出:

Before Sorting:
       Date  Sales  Price
0  April-10    200      3
1  April-11    300      1
2  April-12    400      2
3  April-13    200      4
4  April-14    300      3
5  April-16    300      2
After Sorting:
       Date  Sales  Price
0  April-11    300      1
1  April-12    400      2
2  April-16    300      2
3  April-10    200      3
4  April-14    300      3
5  April-13    200      4

在这里,我们使用 ignore_index=True 为行分配新的索引,并忽略原来 DataFrame 的索引。

示例代码:使用 Pandas DataFrame.sort_values() 基于多列对 DataFrame 进行排序

import pandas as pd

dates=['April-10', 
       'April-11', 
       'April-12', 
       'April-13',
       'April-14',
       'April-16']
sales=[200,300,400,200,300,300]
prices=[3, 1, 2, 4,3,2]

df = pd.DataFrame({'Date':dates ,
                   'Sales':sales ,
                   'Price': prices})
print("Before Sorting:")
print(df)
df.sort_values(by=['Sales','Price'],
               ignore_index=True,
               inplace=True)
print("After Sorting:")
print(df)

输出:

Before Sorting:
       Date  Sales  Price
0  April-10    200      3
1  April-11    300      1
2  April-12    400      2
3  April-13    200      4
4  April-14    300      3
5  April-16    300      2
After Sorting:
       Date  Sales  Price
0  April-10    200      3
1  April-13    200      4
2  April-11    300      1
3  April-16    300      2
4  April-14    300      3
5  April-12    400      2

在这里,首先按升序对 Sales 进行排序,然后对每个 SalesPrice 也按升序进行排序。

df 中,200Sales 列的最小值,3Sales 值为 200Price 列的最小值。

所以,Sales 列中有 200Price 列中有 3 的行排在最前面。

由于 inplace=True,调用 sort_values() 函数后,原 DataFrame 被就地修改。

示例代码:用 Pandas DataFrame.sort_values() 对 DataFrame 进行降序排序

import pandas as pd

dates=['April-10', 
       'April-11', 
       'April-12', 
       'April-13',
       'April-14',
       'April-16']
sales=[200,300,400,200,300,300]
prices=[3, 1, 2, 4,3,2]

df = pd.DataFrame({'Date':dates ,
                   'Sales':sales ,
                   'Price': prices})
print("Before Sorting:")
print(df)
sorted_df=df.sort_values(by=['Sales'],
                         ignore_index=True,
                         ascending=False)
print("After Sorting:")
print(sorted_df)

输出:


Before Sorting:
       Date  Sales  Price
0  April-10    200      3
1  April-11    300      1
2  April-12    400      2
3  April-13    200      4
4  April-14    300      3
5  April-16    300      2
After Sorting:
       Date  Sales  Price
0  April-12    400      2
1  April-11    300      1
2  April-14    300      3
3  April-16    300      2
4  April-10    200      3
5  April-13    200      4

它按照 Sales 列的数值降序对 DataFrame df 进行排序。

400Sales 列中的最大值,因此该条目将被置于顶端,其他行也将相应地进行排序。

示例代码:使用 Pandas DataFrame.sort_values() 对 DataFrame 进行排序,将 NaN 放在开头

import pandas as pd

dates=['April-10', 
       'April-11', 
       'April-12', 
       'April-13',
       'April-14',
       'April-16']
sales=[200,300,400,200,300,300]
prices=[3, 1, 2, 4,3,2]

df = pd.DataFrame({'Date':dates ,
                   'Sales':sales ,
                   'Price': prices})
print("Before Sorting:")
print(df)
sorted_df=df.sort_values(by=['Price'],ignore_index=True,na_position='first')
print("After Sorting:")
print(sorted_df)

输出:

Before Sorting:
       Date  Sales  Price
0  April-10    200    NaN
1  April-11    300    1.0
2  April-12    400    2.0
3  April-13    200    4.0
4  April-14    300    3.0
5  April-16    300    NaN
After Sorting:
       Date  Sales  Price
0  April-10    200    NaN
1  April-16    300    NaN
2  April-11    300    1.0
3  April-12    400    2.0
4  April-14    300    3.0
5  April-13    200    4.0

在默认情况下,NaN 值在排序后被放在 DataFrame 的最后。

但是通过设置 na_position=first,我们可以将 NaN 值放在 DataFrame 的开头。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Pandas DataFrame