探索Pandas分組排序

對於一個大數據集,我們可能會遇到需要對相同類別的數據進行分組排序的情況。Pandas是Python數據處理庫中的一個重要工具,它提供了一些常用的函數可以幫助我們輕鬆地實現分組排序功能。本文將對Pandas分組排序進行詳細闡述,包括從取第一條到添加組內序號等多個方面。

一、Pandas分組排序取第一條

在對數據進行分組排序時,我們常常需要取出每組排序後的第一條數據,來作為代表。使用Pandas的groupby()函數可以先把數據按照指定的列進行分組,然後再使用apply()函數將每個組的數據進行排序,在最後使用first()函數來獲取每個組的第一條數據。

import pandas as pd

# 構造DataFrame數據
data = {'name': ['Amy', 'Bob', 'Cathy', 'David', 'Ella', 'Frank', 'Grace', 'Harry', 'Ivy', 'Jack', 'Kevin'],
        'gender': ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M'],
        'age': [25, 30, 28, 22, 24, 29, 26, 27, 25, 31, 32],
        'score': [85, 90, 92, 88, 87, 93, 91, 86, 89, 94, 96]}

df = pd.DataFrame(data)

# 按照gender分組
grouped = df.groupby('gender')

# 對每組數據按照score進行排序,並返回每組的第一條數據
result = grouped.apply(lambda x: x.sort_values(['score'], ascending=False)).groupby('gender').first()

print(result)

上面的代碼將groupby()apply()函數組合使用,實現了以性別為分組依據,每組數據按照分數降序排序,最後輸出每組排名第一的數據的效果。通過以上代碼的演示,我們可以了解到Pandas分組排序的基本使用方法。

二、Pandas分組取最小

同樣,我們可以使用Pandas的groupby()函數對數據進行分組,然後使用min()函數來獲取每組數據中最小值。

# 按照gender分組
grouped = df.groupby('gender')

# 對每組數據的age取最小值
result = grouped['age'].min()

print(result)

上述代碼實現了以性別為分組依據,輸出每組年齡的最小值。

三、Pandas分組排序序號

在分組排序中,我們常常希望知道每個數據在其所在組中的排名,使用Pandas中的rank()函數可以實現這一功能。

# 構造DataFrame數據
data = {'name': ['Amy', 'Bob', 'Cathy', 'David', 'Ella', 'Frank', 'Grace', 'Harry', 'Ivy', 'Jack', 'Kevin'],
        'gender': ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M'],
        'age': [25, 30, 28, 22, 24, 29, 26, 27, 25, 31, 32],
        'score': [85, 90, 92, 88, 87, 93, 91, 86, 89, 94, 96]}

df = pd.DataFrame(data)

# 按照gender分組
grouped = df.groupby('gender')

# 對每個分組的score進行排序,然後獲取排名
result = grouped.apply(lambda x: x.assign(rank=x['score'].rank(method='dense', ascending=False)))

print(result)

上面的代碼對每個分組的score進行排序後,使用rank()函數獲取排名,然後使用assign()函數將排名賦值給rank字段,最終輸出完整的DataFrame,其中包含每個數據所在組和在組內的排名。

四、Pandas分組取數據

Pandas的groupby()函數除了能夠對數據進行分組排序,還能夠根據分組條件選擇出相應的數據。使用get_group()函數可以獲取指定分組的數據。

# 獲取gender為F的數據
result = grouped.get_group('F')

print(result)

上面的代碼輸出了所有gender為F的數據,即取出了DataFrame中符合指定條件的數據。

五、Pandas分組排序後獲取前三條

在對數據進行分組排序後,我們常常需要取出每組排名前幾位的數據。使用Pandas中的head()函數可以實現這一功能。

# 對每個分組的score進行排序,然後獲取前三條數據
result = grouped.apply(lambda x: x.sort_values(['score'], ascending=False).head(3))

print(result)

上面的代碼將每個分組的score進行排序,然後使用head()函數獲取排名前三的數據,最後輸出完整的DataFrame。

六、Pandas分組排序取每組第一個

在分組排序中,我們還可以使用first()函數獲取每組數據的第一個數據。

# 按照gender分組,並獲取每組的第一個數據
result = grouped.first()

print(result)

上面的代碼輸出了每個分組的第一條數據,即獲取每組數據的第一個數據。

七、Pandas分組排序添加組內序號

在將數據按照分組排序後,我們通常需要為其添加組內序號,使用Pandas中的cumcount()函數可以實現這一功能。

# 按照gender分組,然後對每個組的score排序,並添加排名
result = df.assign(rank=df.groupby('gender')['score'].rank(method='dense', ascending=False).astype(int))

print(result)

上述代碼使用cumcount()函數為每個分組內的數據添加排名。使用df.assign()函數將數值類型轉換為整型後輸出完整的DataFrame。

八、分組排序函數

除了上述介紹的常用函數外,Pandas還提供了一些分組排序函數可以供我們使用。下面分別介紹:

nlargest()

該函數返回指定列最大的幾個值。

# 獲取每個分組score最高的兩個數據
result = df.groupby('gender').apply(lambda x: x.nlargest(2, 'score'))

print(result)

nsmallest()

該函數返回指定列最小的幾個值。

# 獲取每個分組score最低的兩個數據
result = df.groupby('gender').apply(lambda x: x.nsmallest(2, 'score'))

print(result)

cummax()

該函數返回指定列的累計最大值。

# 獲取每個分組的score的累計最大值
result = df.groupby('gender')['score'].cummax()

print(result)

cummin()

該函數返回指定列的累計最小值。

# 獲取每個分組的score的累計最小值
result = df.groupby('gender')['score'].cummin()

print(result)

本文介紹了Pandas分組排序的使用方法,包括取第一條、取最小、添加序號等多個方面。通過本文的介紹,相信大家已經可以熟練掌握使用Pandas對數據進行分組排序的技巧了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152027.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-12 00:54
下一篇 2024-11-12 00:54

相關推薦

  • Pandas下載whl指南

    本篇文章將從幾個方面為大家詳細解答如何下載Pandas的whl文件。 一、Pandas簡介 Pandas是一個基於Python的軟件庫,主要用於數據分析、清洗和處理。在數據處理方面…

    編程 2025-04-28
  • 如何在Python中安裝和使用Pandas

    本文將介紹如何安裝和使用Python的Pandas庫 一、Pandas庫的介紹 Pandas是Python的一個數據分析庫,提供了許多實用的數據結構和數據分析工具,可以幫助用戶輕鬆…

    編程 2025-04-27
  • 深入解析pandas的drop_duplicates()函數

    在數據處理和清洗過程中,一個經常出現的問題是如何移除重複的數據項。pandas提供了一種方便易用的方式來完成這項任務——drop_duplicates()函數。本文將從多個方面深入…

    編程 2025-04-24
  • 詳解pandas fillna 指定列

    一、fillna的基礎用法 fillna是pandas中一個常用的函數,它用於填充數據框或序列中的空值。我們先來看一個簡單的案例: import pandas as pd impo…

    編程 2025-04-24
  • Pandas apply函數詳解

    Pandas是Python的一個開源數據分析庫,專門用於數據操作和分析。其中apply()函數是Pandas中常用的數據操作函數之一,本文將從多個方面對這個函數進行詳細的闡述。 一…

    編程 2025-04-24
  • Pandas分組統計

    Pandas是一個強大的數據分析工具,可以用來處理大量的數據,包括分組,匯總和統計等。當面對大量的數據時,經常需要按照特定的標準對數據進行分組,然後對每個組進行統計分析,這時候就需…

    編程 2025-04-23
  • Pandas讀取txt文件詳解

    一、pandas讀取txt文件存入excel表 在數據處理中,我們通常將原始數據存儲為txt文件,而pandas提供了很多方法來讀取txt文件。下面我們演示如何將txt文件讀取並存…

    編程 2025-04-22
  • 深入探究pandas遍歷每一行

    pandas是一個強大的Python數據分析庫,它提供了豐富的數據結構和函數,用於數據清洗、數據處理和數據分析。其中,最重要的數據結構之一是DataFrame,它類似於SQL中的表…

    編程 2025-04-13
  • pandas unstack詳解

    一、概述 pandas是一個流行的數據處理庫,而unstack是pandas中一個很常見的操作,它可以將pivot後的表再次變換成我們需要的格式,比如將二維的DataFrame轉變…

    編程 2025-04-12
  • 從多個方面詳解pandas查詢

    一、基礎查詢 pandas作為Python數據分析的重要庫,提供了豐富的數據操作和查詢功能,但需要一定的基礎和經驗。pandas最基礎的查詢功能是根據索引號或者列名進行查詢。 im…

    編程 2025-04-02

發表回復

登錄後才能評論