Python中groupby的簡單使用

2021-10-04 12:37:43 字數 3431 閱讀 5191

首先先建立乙個**:

import pandas as pd

df = pd.dataframe(

)df

現在先簡單使用**中的特徵』key1』對資料進行劃分:

grouped=df.groupby(

['key1'])

for name ,group in grouped:

print

(name)

print

(group)

得到的劃分結果如下所示:

通過上面這個圖可以發現grouped=df.groupby([『key1』])的作用是根據「key1」的不同值將**df分為兩個部分,第乙個部分是「key1=a」,第二個部分是「key1=b」。用其它特徵進行劃分原理一樣。

現在我們不僅是用「key1」對**進行劃分,同時還要對劃分之後的**求其中特徵的均值,例如用以下**求劃分後的特徵的均值:

grouped = df.groupby(

['key1'])

.mean(

)grouped

其輸出結果如下:

通過上圖可以發現,通過「key1」對**df劃分為兩部分之後,再對兩部分中的「data1」和「data2」進行求平均值操作。這裡不對「key2」進行求平均值操作,因為特徵「key2」是文字類資訊,沒有平均值,所以不進行求平均值操作。

上面討論了使用乙個特徵對**df進行分組,現在使用多個特徵對**df進行劃分,簡單地分析,使用特徵「key1」和「key2」對**進行劃分,那會輸出什麼呢?輸入以下**:

for name, group in df.groupby(

['key1'

,'key2'])

:print

("劃分的特徵值:"

,name)

print

(group,

'\n'

)

得到的輸出結果如下:

通過上面這個圖可以發現,因為現在要使用兩個特徵對**進行劃分,特徵「key1」和特徵「key2」同樣有兩個類別,因此組合得到的劃分情況有四種,根據不同的劃分組合得到符合要求的劃分**,這樣就得到了上圖中的情況。當使用三個或者四個特徵對**進行劃分的時候,組合的個數更多,同時會劃分得更加細緻。具體原理是一樣的。

在上面介紹多特徵對**進行劃分的時候,我們是基於整個**進行劃分的,如果我們只想針對其中的部分特徵進行劃分,具體又該怎麼操作呢?我們現有有下面這個**,如果我們只想對其中的「data1」和「data2」基於「key1」進行劃分,該怎麼操作呢?

輸入以下**:

for name, group in df[

['data1'

,'data2'

,'key1']]

.groupby(

['key1'])

:print

("劃分的特徵值:"

,name)

print

(group,

'\n'

)

得到的輸出結果如下圖所示:

其實這個和最開始介紹的對整個**進行劃分的原理是一樣的,但是需要注意的是,**不能寫成下面的形式:

for name, group in df[

['data1'

,'data2']]

.groupby(

['key1'])

:print

("劃分的特徵值:"

,name)

print

(group,

'\n'

)

這樣的**是錯誤的,這段**和前一段**的差別主要在於df[[『data1』,『data2』]]中沒有了』key1』,這樣是不行的,因為這樣的意思是我們選取了**中的』data1』列和』data2』列,但是沒有選取』key1』列,這樣資料中沒有』key1』,是沒有辦法進行劃分的。

上面說了很多對於groupby的功能介紹,但是這個東西究竟能用在什麼地方呢?這裡簡單舉乙個例子。

現在有乙個場景,有兩家商店1和2,每家商店有a,b,c三種商品,每家商店的每種商品都有各自的日銷售額,現在要快速得到每家商店每種商品的月銷售額,那麼我們就可以使用groupby來進行操作。

具體的資料如下:

import pandas as pd

df = pd.dataframe(

)df

我們得到的**具體如下所示:

現在我們需要計算每家商店每種商品的月銷售額,使用groupby進行操作,具體**如下:

grouped = df.groupby(

['shop_id'

,'item_id'])

.sum()

.reset_index(

)grouped.rename(columns=

)

**中的第一步是使用「shop_id」和「item_id」對**進行分類,這樣因為商店有兩種,商品有三種,對於每一家商店都有三種情況,劃分後記進行求和操作就可以得到每家商店的月銷售額,**中的resent_index()的作用是保留作為劃分的「shop_id」和「item_id」,如果去掉則輸出的是另一種**形式。第二段**是對其中的「item_daysale」特徵進行改名。

這樣得到的最後的輸出如下如所示:

這樣便完成了對銷售額的月總和計算。

如果我們**中沒有輸入resent_index(),則輸出如下所示:

這並不是我們想要的輸出,我們希望輸出的列項有「shop_id」,「item_id」和「item_monthsale」。所以得根據具體需要什麼來寫**實現。

Python中的分組函式groupby及其壓縮應用

我們先來看乙個題目 給定一組字元,使其壓縮,壓縮後的長度必須始終小於或等於原陣列長度。示例 1 輸入 a a b b c c c 輸出 a 2 b 2 c 3 說明 aa 被 a2 替代。bb 被 b2 替代。ccc 被 c3 替代。或者輸出乙個描述元組 輸入 a a b b c c c 輸出 a ...

linq to xml中group by的應用

xml文件內容如下 003小張 female 30南大 13328981152 004徐越 female 22乙個大學 13328981152 005小櫻 female 22南大 13328981152 006小趙 female 22南郵 13328981152 007小虎 female 22東南 ...

JS中的groupBy方法

最近工作中需要寫一些運營資料包表的頁面,後端返回的資料都是未處理過的json,所以,大量的運算任務交給了前端來做,這其中有乙個功能就是對資料進行分組,一開始我自己也嘗試寫了一些,但 量比較大,顯得很繁瑣,直到後來在stackoverflow上看到了某位大牛寫的方法,非常簡潔優雅,如下 functio...