對於一個大數據集,我們可能會遇到需要對相同類別的數據進行分組排序的情況。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-tw/n/152027.html