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