最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas DataFrame中兩種排序函數(shù)的使用

 更新時間:2026年04月17日 09:37:24   作者:林深時見鹿1  
本文主要介紹了Pandas DataFrame中兩種排序函數(shù)的使用,包括sort_values() 和 sort_index()的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、排序的核心函數(shù):sort_values()和sort_index()

DataFrame 的排序主要依賴兩個核心函數(shù),先明確它們的定位:

函數(shù)核心作用適用場景
sort_values()按列的值排序(最常用)按分數(shù)、日期、金額等業(yè)務字段排序
sort_index()按行 / 列索引排序按行標簽(如學號、日期)或列名排序

通用參數(shù)(兩個函數(shù)都支持)

參數(shù)作用常用值
ascending升序 / 降序True(升序,默認)/False(降序)
inplace是否修改原 DataFrameFalse(返回新對象,默認)/True(原地修改)
na_position缺失值(NaN)的位置last(默認,放最后)/first(放最前)
ignore_index是否重置行索引(0,1,2...)False(保留原索引,默認)/True(重置)

二、核心排序:按列值排序(sort_values())

這是實戰(zhàn)中最常用的排序方式,支持單列、多列、自定義排序規(guī)則。

1. 單列排序(基礎(chǔ))

import pandas as pd
import numpy as np
# 構(gòu)建示例數(shù)據(jù)(學生成績)
data = {
    "姓名": ["小明", "小紅", "小剛", "小麗", "小強"],
    "班級": ["1班", "2班", "1班", "2班", "1班"],
    "數(shù)學": [85, 92, 78, 90, np.nan],  # 含缺失值
    "語文": [92, 88, 80, 85, 90]
}
df = pd.DataFrame(data, index=["stu01", "stu02", "stu03", "stu04", "stu05"])
print("原始DataFrame:")
print(df)
# 1.1 按「數(shù)學」列升序排序(默認)
df_sort_math_asc = df.sort_values(by="數(shù)學")
print("\n按數(shù)學升序排序(缺失值放最后):")
print(df_sort_math_asc)
# 1.2 按「數(shù)學」列降序排序,缺失值放最前
df_sort_math_desc = df.sort_values(by="數(shù)學", ascending=False, na_position="first")
print("\n按數(shù)學降序排序(缺失值放最前):")
print(df_sort_math_desc)
# 1.3 原地排序(修改原DataFrame)+ 重置行索引
df.sort_values(by="語文", ascending=False, inplace=True, ignore_index=True)
print("\n按語文降序原地排序(重置索引):")
print(df)

關(guān)鍵說明

  • by="列名" 是必傳參數(shù),指定排序依據(jù)的列;
  • na_position 僅對含 NaN 的列有效,默認 last(缺失值放最后);
  • ignore_index=True 會將排序后的行索引重置為 0,1,2...,避免原索引混亂。

2. 多列排序(進階)

按多個列依次排序(先按第一列,第一列值相同則按第二列),適用于 “分組排序” 場景。

import pandas as pd
# 重置示例數(shù)據(jù)
data = {
    "姓名": ["小明", "小紅", "小剛", "小麗", "小強", "小芳"],
    "班級": ["1班", "2班", "1班", "2班", "1班", "2班"],
    "數(shù)學": [85, 92, 85, 90, 88, 92],
    "語文": [92, 88, 80, 85, 90, 82]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 2.1 先按「班級」升序,再按「數(shù)學」降序排序
df_sort_multi = df.sort_values(
    by=["班級", "數(shù)學"],  # 排序列(先班級,后數(shù)學)
    ascending=[True, False]  # 對應列的排序方向(班級升序,數(shù)學降序)
)
print("\n按班級升序、數(shù)學降序排序:")
print(df_sort_multi)
# 2.2 多列排序+重置索引
df_sort_multi_reset = df.sort_values(
    by=["班級", "語文"],
    ascending=[True, True],
    ignore_index=True
)
print("\n按班級升序、語文升序排序(重置索引):")
print(df_sort_multi_reset)

核心邏輯

  • by 傳入列名列表,排序優(yōu)先級從左到右;
  • ascending 傳入布爾值列表,與 by 的列一一對應(數(shù)量必須相等)。

3. 按字符串列排序(特殊場景)

支持按字符串的字母 / 漢字順序排序,可結(jié)合字符串方法增強靈活性。

import pandas as pd
data = {
    "姓名": ["張三", "李四", "王五", "趙六", "錢七"],
    "城市": ["北京", "上海", "廣州", "深圳", "北京"],
    "分數(shù)": [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 3.1 按「姓名」字符串排序(漢字拼音順序)
df_sort_name = df.sort_values(by="姓名")
print("\n按姓名字符串排序:")
print(df_sort_name)
# 3.2 按「城市」升序,再按「分數(shù)」降序
df_sort_city_score = df.sort_values(by=["城市", "分數(shù)"], ascending=[True, False])
print("\n按城市升序、分數(shù)降序排序:")
print(df_sort_city_score)
# 3.3 按字符串長度排序(需自定義key)
df["姓名長度"] = df["姓名"].str.len()
df_sort_len = df.sort_values(by="姓名長度")
print("\n按姓名長度排序:")
print(df_sort_len)

三、按索引排序(sort_index())

分為「按行索引排序」和「按列索引(列名)排序」,適用于索引有業(yè)務含義的場景(如日期索引、學號索引)。

1. 按行索引排序

import pandas as pd
# 構(gòu)建帶自定義行索引的DataFrame
data = {
    "數(shù)學": [85, 92, 78, 90],
    "語文": [92, 88, 80, 85]
}
df = pd.DataFrame(data, index=["stu03", "stu01", "stu04", "stu02"])
print("原始DataFrame(行索引混亂):")
print(df)
# 1.1 按行索引升序排序(默認)
df_sort_idx_asc = df.sort_index()
print("\n按行索引升序排序:")
print(df_sort_idx_asc)
# 1.2 按行索引降序排序
df_sort_idx_desc = df.sort_index(ascending=False)
print("\n按行索引降序排序:")
print(df_sort_idx_desc)

2. 按列名排序

通過 axis=1 指定按列索引(列名)排序,適用于列名較多且需規(guī)范順序的場景。

import pandas as pd
# 構(gòu)建列名混亂的DataFrame
data = {
    "語文": [92, 88, 80],
    "班級": ["1班", "2班", "1班"],
    "數(shù)學": [85, 92, 78],
    "姓名": ["小明", "小紅", "小剛"]
}
df = pd.DataFrame(data)
print("原始DataFrame(列名混亂):")
print(df)
# 按列名升序排序(axis=1)
df_sort_cols = df.sort_index(axis=1)
print("\n按列名升序排序:")
print(df_sort_cols)
# 按列名降序排序
df_sort_cols_desc = df.sort_index(axis=1, ascending=False)
print("\n按列名降序排序:")
print(df_sort_cols_desc)

關(guān)鍵參數(shù)

  • axis=0(默認):按行索引排序;
  • axis=1:按列索引(列名)排序。

四、進階排序技巧

1. 按自定義規(guī)則排序(key參數(shù))

sort_values()key 參數(shù)支持傳入自定義函數(shù),實現(xiàn)非默認排序邏輯(如按字符串首字母、數(shù)值的絕對值排序)。

import pandas as pd
import numpy as np
data = {
    "姓名": ["Alice", "Bob", "Charlie", "David"],
    "分數(shù)": [85, -92, 78, -90],
    "等級": ["B", "A", "C", "A"]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 1.1 按分數(shù)的絕對值降序排序
df_sort_abs = df.sort_values(by="分數(shù)", key=lambda x: x.abs(), ascending=False)
print("\n按分數(shù)絕對值降序排序:")
print(df_sort_abs)
# 1.2 按姓名首字母小寫排序
df_sort_name_lower = df.sort_values(by="姓名", key=lambda x: x.str.lower())
print("\n按姓名首字母小寫排序:")
print(df_sort_name_lower)
# 1.3 按自定義等級規(guī)則排序(A>B>C)
grade_order = {"A": 1, "B": 2, "C": 3}
df_sort_grade = df.sort_values(by="等級", key=lambda x: x.map(grade_order))
print("\n按等級規(guī)則(A>B>C)排序:")
print(df_sort_grade)

2. 按行值排序(橫向排序)

默認排序是 “縱向”(按列值排行),如需 “橫向”(按行值排列),需結(jié)合 applysort_values

import pandas as pd
# 構(gòu)建每行是學生、每列是科目的DataFrame
data = {
    "數(shù)學": [85, 92, 78],
    "語文": [92, 88, 80],
    "英語": [88, 90, 85]
}
df = pd.DataFrame(data, index=["小明", "小紅", "小剛"])
print("原始DataFrame(每行是學生,每列是科目):")
print(df)
# 按每行的值降序排序(橫向排序,即每個學生的科目按分數(shù)從高到低排)
df_sort_row = df.apply(lambda x: x.sort_values(ascending=False).values, axis=1)
# 重置列名(保持原列名順序,僅值排序)
df_sort_row.columns = df.columns
print("\n按每行分數(shù)降序排序(橫向):")
print(df_sort_row)

3. 排序后保留 / 刪除重復值

排序后結(jié)合 drop_duplicates() 實現(xiàn) “保留每組最大值 / 最小值” 的場景。

import pandas as pd
data = {
    "班級": ["1班", "1班", "2班", "2班", "1班"],
    "數(shù)學": [85, 92, 78, 90, 88],
    "姓名": ["小明", "小紅", "小剛", "小麗", "小強"]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 按班級分組,保留每個班級數(shù)學分數(shù)最高的學生
# 步驟1:按班級升序、數(shù)學降序排序
df_sort = df.sort_values(by=["班級", "數(shù)學"], ascending=[True, False])
# 步驟2:按班級去重,保留第一個(即分數(shù)最高的)
df_top1 = df_sort.drop_duplicates(subset=["班級"], keep="first")
print("\n每個班級數(shù)學最高分學生:")
print(df_top1)

五、實戰(zhàn)場景:排序的典型應用

時間序列數(shù)據(jù)排序

import pandas as pd
import numpy as np
# 構(gòu)建日期索引混亂的溫度數(shù)據(jù)
dates = pd.date_range("2026-01-01", periods=5)
np.random.shuffle(dates)  # 打亂日期
data = {
    "溫度": np.random.normal(5, 3, 5).round(1),
    "濕度": np.random.uniform(30, 80, 5).round(1)
}
df = pd.DataFrame(data, index=dates)
print("原始時間序列數(shù)據(jù)(日期混亂):")
print(df)
# 按日期索引升序排序(恢復時間順序)
df_sort_date = df.sort_index()
print("\n按日期升序排序:")
print(df_sort_date)
# 按溫度降序排序,保留日期索引
df_sort_temp = df.sort_values(by="溫度", ascending=False)
print("\n按溫度降序排序:")
print(df_sort_temp)

六、避坑點與最佳實踐

1. 核心避坑點

  • ? 多列排序時 ascending 數(shù)量不匹配:by=["A","B"] 必須對應 ascending=[True, False](2 個值);
  • ? 混淆 axis 參數(shù):按列名排序需設(shè) axis=1,默認 axis=0 是按行索引;
  • ? 忽略缺失值位置:含 NaN 的列排序時,NaN 默認放最后,需調(diào)整 na_position 時忘記設(shè)置;
  • ? 原地排序后索引混亂:未加 ignore_index=True,導致排序后行索引還是原混亂索引;
  • ? 自定義 key 函數(shù)錯誤:key 需返回與原列長度相同的數(shù)組(如 lambda x: x.abs()),而非單個值。

2. 最佳實踐

  • ? 優(yōu)先用 sort_values() 按業(yè)務列排序,sort_index() 按索引排序;
  • ? 多列排序時,先排分組列(如班級),后排業(yè)務列(如分數(shù));
  • ? 排序后重置索引:重要分析結(jié)果建議加 ignore_index=True,避免索引混亂;
  • ? 自定義排序用 key 參數(shù):避免手動修改數(shù)據(jù)后排序,保持代碼簡潔;
  • ? 大數(shù)據(jù)集排序:先篩選需要的列(usecols),再排序,提升效率。

總結(jié)

  1. DataFrame 排序核心依賴兩個函數(shù):
    • sort_values(by=列名):按列值排序(單列 / 多列),支持 ascending/na_position/key;
    • sort_index(axis=0/1):按行 / 列索引排序,適用于索引有業(yè)務含義的場景;
  2. 核心參數(shù):
    • by:指定排序列(僅 sort_values 需傳);
    • ascending:排序方向(True = 升序,F(xiàn)alse = 降序);
    • ignore_index:排序后重置行索引(推薦開啟);
    • axis:按行 / 列索引排序(僅 sort_index 需傳);
  3. 進階技巧:
    • 自定義規(guī)則用 key 參數(shù)(如絕對值、字符串處理);
    • 橫向排序用 apply(axis=1);
    • 分組取最值:排序 +drop_duplicates();
  4. 避坑關(guān)鍵:多列排序時 ascending 數(shù)量匹配,含缺失值時指定 na_position,排序后重置索引。

到此這篇關(guān)于Pandas DataFrame中兩種排序函數(shù)的使用的文章就介紹到這了,更多相關(guān)Pandas DataFrame排序函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python Scrapy框架原理解析

    python Scrapy框架原理解析

    這篇文章主要介紹了python Scrapy框架原理的相關(guān)資料,幫助大家更好的理解和使用python爬蟲,感興趣的朋友可以了解下
    2021-01-01
  • 進一步理解Python中的函數(shù)編程

    進一步理解Python中的函數(shù)編程

    這篇文章主要介紹了進一步理解Python中的函數(shù)編程,本文進一步討論了Python中函數(shù)編程的一些要點,來自IBM官方技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python查詢阿里巴巴關(guān)鍵字排名的方法

    Python查詢阿里巴巴關(guān)鍵字排名的方法

    這篇文章主要介紹了Python查詢阿里巴巴關(guān)鍵字排名的方法,涉及Python基于urllib模塊解析html頁面及進行URL查詢的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python中if語句的使用方法及實例代碼

    Python中if語句的使用方法及實例代碼

    if語句能夠進行條件測試,并依據(jù)一定的條件進行具體的操作,下面這篇文章主要給大家介紹了關(guān)于Python中if語句的使用方法及實例代碼,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 如何使用python檢測某網(wǎng)盤鏈接是否有效

    如何使用python檢測某網(wǎng)盤鏈接是否有效

    這篇文章主要為大家介紹了使用python檢測某網(wǎng)盤鏈接是否有效的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • python列表list保留順序去重的實例

    python列表list保留順序去重的實例

    今天小編就為大家分享一篇python列表list保留順序去重的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • PyQt5中向單元格添加控件的方法示例

    PyQt5中向單元格添加控件的方法示例

    這篇文章主要介紹了PyQt5中向單元格添加控件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 使用tensorflow實現(xiàn)線性svm

    使用tensorflow實現(xiàn)線性svm

    這篇文章主要為大家詳細介紹了使用tensorflow實現(xiàn)線性svm的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 使用Python生成詞云圖的詳細指南

    使用Python生成詞云圖的詳細指南

    在數(shù)據(jù)可視化領(lǐng)域,詞云圖是一種非常直觀且受歡迎的展示文本數(shù)據(jù)中關(guān)鍵詞頻率的方式,Python 中的wordcloud庫提供了一種簡單而強大的方法來生成詞云圖,本文就給大家介紹了使用Python生成詞云圖的詳細指南,需要的朋友可以參考下
    2024-12-12
  • Python線程之認識線程安全?

    Python線程之認識線程安全?

    這篇文章主要介紹了Python線程之認識線程安全,線程安全,名字就非常直接,在多線程情況下是安全的,多線程操作上的安全,下面學習線程安全的文章詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02

最新評論

错那县| 武平县| 齐河县| 荣昌县| 图们市| 扶风县| 蒙山县| 密山市| 鹿邑县| 徐州市| 饶平县| 博野县| 廉江市| 千阳县| 彰化县| 澄迈县| 兰西县| 乳山市| 永州市| 九龙城区| 巫溪县| 美姑县| 威海市| 龙山县| 崇礼县| 九台市| 永胜县| 荥阳市| 惠来县| 额敏县| 陆丰市| 准格尔旗| 冕宁县| 两当县| 区。| 哈巴河县| 桂东县| 保康县| 安丘市| 方城县| 长沙县|