1. 程式人生 > 程式設計 >詳解python中groupby函式通俗易懂

詳解python中groupby函式通俗易懂

一、groupby 能做什麼?

python中groupby函式主要的作用是進行資料的分組以及分組後地組內運算!

對於資料的分組和分組運算主要是指groupby函式的應用,具體函式的規則如下:

df[](指輸出資料的結果屬性名稱).groupby([df[屬性],df[屬性])(指分類的屬性,資料的限定定語,可以有多個).mean()(對於資料的計算方式——函式名稱)

舉例如下:

print(df["評分"].groupby([df["地區"],df["型別"]]).mean())
#上面語句的功能是輸出表格所有資料中不同地區不同型別的評分資料平均值

二、單類分組

A.groupby("性別")

詳解python中groupby函式通俗易懂

首先,我們有一個變數A,資料型別是DataFrame

想要按照【性別】進行分組

得到的結果是一個Groupby物件,還沒有進行任何的運算。

describe()

描述組內資料的基本統計量

A.groupby("性別").describe().unstack()

詳解python中groupby函式通俗易懂

* 只有數字型別的列資料才會計算統計

* 示例裡面數字型別的資料有兩列 【班級】和【身高】

但是,我們並不需要統計班級的均值等資訊,只需要【身高】,所以做一下小的改動:

A.groupby("性別")["身高"].describe().unstack()

詳解python中groupby函式通俗易懂

unstack()

索引重排

上面的例子裡面用到了一個小的技巧,讓運算結果更便於對比檢視,感興趣的同學可以自行去除unstack,比較一下顯示的效果

三、多類分組

A.groupby( ["班級","性別"])

詳解python中groupby函式通俗易懂

單獨用groupby,我們得到的還是一個 Groupby 物件。

mean()

組內均值計算

DataFrame的很多函式可以直接運用到Groupby物件上。

詳解python中groupby函式通俗易懂

上圖截自 pandas 官網 document,這裡就不一一細說。

我們還可以一次運用多個函式計算

A.groupby( ["班級","性別"]).agg([np.sum,np.mean,np.std]) # 一次計算了三個

詳解python中groupby函式通俗易懂

agg()

分組多個運算

四、時間分組

時間序列可以直接作為index,或者有一列是時間序列,差別不是很大。

這裡僅僅演示,某一列為時間序列。

為A 新增一列【生日】,由於分隔符 “/” 的問題,我們檢視列屬性,【生日】的屬性並不是日期型別

詳解python中groupby函式通俗易懂

我們想做的是:

1、按照【生日】的【年份】進行分組,看看有多少人是同齡?

A["生日"] = pd.to_datetime(A["生日"],format ="%Y/%m/%d") # 轉化為時間格式
A.groupby(A["生日"].apply(lambda x:x.year)).count() # 按照【生日】的【年份】分組

進一步,我們想選拔:

2、同一年作為一個小組,小組內生日靠前的那一位作為小隊長:

A.sort_values("生日",inplace=True) # 按時間排序
A.groupby(A["生日"].apply(lambda x:x.year),as_index=False).first() 

詳解python中groupby函式通俗易懂

as_index=False

保持原來的資料索引結果不變

first()

保留第一個資料

Tail(n=1)

保留最後n個數據

再進一步:

3、想要找到哪個月只有一個人過生日

A.groupby(A["生日"].apply(lambda x:x.month),as_index=False) # 到這裡是按月分組
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False).filter(lambda x: len(x)==1)

詳解python中groupby函式通俗易懂

filter()

對分組進行過濾,保留滿足()條件的分組

以上就是 groupby 最經常用到的功能了。

用 first(),tail()擷取每組前後幾個資料

用 apply()對每組進行(自定義)函式運算

用 filter()選取滿足特定條件的分組

到此這篇關於詳解python中groupby函式通俗易懂的文章就介紹到這了,更多相關python groupby函式內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!