国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python】Pandas Groupby操作的25個示例

這篇具有很好參考價值的文章主要介紹了【Python】Pandas Groupby操作的25個示例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


在日常的數(shù)據(jù)分析中,經(jīng)常需要將數(shù)據(jù)根據(jù)某個(多個)字段劃分為不同的群體(group)進行分析,如電商領(lǐng)域?qū)⑷珖目備N售額根據(jù)省份進行劃分,分析各省銷售額的變化情況,社交領(lǐng)域?qū)⒂脩舾鶕?jù)畫像(性別、年齡)進行細分,研究用戶的使用情況和偏好等。在Pandas中,上述的數(shù)據(jù)處理操作主要運用groupby完成,本文就介紹一下 groupby的基本原理及對應(yīng)的 agg、 transformapply等操作,總共包含25個代碼示例。

首先,模擬生成10個樣本數(shù)據(jù):

import pandas as pd
import numpy as np

company=["A","B","C"]
data=pd.DataFrame({
    "company":[company[x] for x in np.random.randint(0,len(company),10)],
    "salary":np.random.randint(5,50,10),
    "age":np.random.randint(15,50,10)
    }
)

python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

1. Groupby的基本原理

在pandas中,實現(xiàn)分組操作的代碼很簡單,僅需一行代碼,在這里,將上面的數(shù)據(jù)集按照company字段進行劃分:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
這個生成的DataFrameGroupBy是啥呢?對data進行了groupby后發(fā)生了什么?ipython所返回的結(jié)果是其內(nèi)存地址,并不利于直觀地理解,為了看看group內(nèi)部究竟是什么,這里把group轉(zhuǎn)換成list的形式來看一看:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
轉(zhuǎn)換成列表的形式后,可以看到,列表由三個元組組成,每個元組中,第一個元素是組別(這里是按照company進行分組,所以最后分為了A,B,C),第二個元素的是對應(yīng)組別下的DataFrame,整個過程可以圖解如下:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

總結(jié)來說,groupby的過程就是將原有的DataFrame按照groupby的字段(這里是company),劃分為若干個分組DataFrame,被分為多少個組就有多少個分組DataFrame。所以說,在groupby之后的一系列操作(如agg、apply等),均是基于子DataFrame的操作。理解了這點,也就基本摸清了Pandas中g(shù)roupby操作的主要原理。

2. agg聚合操作

聚合操作是groupby操作之后非常常見的操作。聚合操作可以用來求和、均值、最大值、最小值等,下面的表格列出了Pandas中常見的聚合操作。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
針對樣例數(shù)據(jù)集,如果想求不同公司員工的平均年齡和平均薪水,可以按照下方的代碼進行:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
如果想對針對不同的列求不同的值,比如要計算不同公司員工的平均年齡以及薪水的中位數(shù),可以利用字典進行聚合操作的指定:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
agg聚合過程可以圖解如下(第二個例子為例):
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

3. transform

transform是一種什么數(shù)據(jù)操作?和agg有什么區(qū)別呢?為了更好地理解transform和agg的不同,下面從實際的應(yīng)用場景出發(fā)進行對比。

在上面的agg中,我們知道了如何求不同公司員工的平均薪水,如果現(xiàn)在需要在原數(shù)據(jù)集中新增一列avg_salary,代表員工所在的公司的平均薪水(相同公司的員工具有一樣的平均薪水),該怎么實現(xiàn)呢?如果按照正常的步驟來計算,需要先求得不同公司的平均薪水,然后按照員工和公司的對應(yīng)關(guān)系填充到對應(yīng)的位置,不用transform的話,實現(xiàn)代碼如下:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
如果使用transform的話,僅需要一行代碼:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
還是以圖解的方式來看看進行g(shù)roupby后transform的實現(xiàn)過程(為了更直觀展示,圖中加入了company列,實際按照上面的代碼只有salary列):
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
圖中的大方框是transform和agg所不一樣的地方,對agg而言,會計算得到A,B,C公司對應(yīng)的均值并直接返回,但對transform而言,則會對每一條數(shù)據(jù)求得相應(yīng)的結(jié)果,同一組內(nèi)的樣本會有相同的值,組內(nèi)求完均值后會按照原索引的順序返回結(jié)果,如果有不理解的可以拿這張圖和agg那張對比一下。

4. apply

apply應(yīng)該是大家的老朋友了,它相比agg和transform而言更加靈活,能夠傳入任意自定義的函數(shù),實現(xiàn)復(fù)雜的數(shù)據(jù)操作。那么問題來了,在groupby后使用apply和groupby之前使用有什么區(qū)別呢?

區(qū)別是有的,但是整個實現(xiàn)原理是基本一致的。兩者的區(qū)別在于,對于groupby后的apply,以分組后的子DataFrame作為參數(shù)傳入指定函數(shù)的,基本操作單位是DataFrame,而之前介紹的apply的基本操作單位是Series。還是以一個案例來介紹groupby后的apply用法。

假設(shè)現(xiàn)在需要獲取各個公司年齡最大的員工的數(shù)據(jù),該怎么實現(xiàn)呢?可以用以下代碼實現(xiàn):
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
這樣便得到了每個公司年齡最大的員工的數(shù)據(jù),整個流程圖解如下:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
最后,關(guān)于apply的使用,這里有個小建議,雖然說apply擁有更大的靈活性,但apply的運行效率會比agg和transform更慢。所以,groupby之后能用agg和transform解決的問題還是優(yōu)先使用這兩個方法,實在解決不了了才考慮使用apply進行操作。

5. 25個代碼示例

1. 單列聚合

計算出每個company的平均salary:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

2. 多列聚合

在一個操作中進行多個聚合。下面是計算每個company的平均薪資和年齡:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
注意,這里使用的是雙方括號“[[]]”。

3. 多方式聚合

使用agg函數(shù)來計算多個聚合值:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

4. 對聚合結(jié)果進行命名

可以對聚合的結(jié)果進行命名:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

5. 多個聚合和多個函數(shù)

python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

6. 不同列的聚合進行命名

python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

7. as_index參數(shù)

如果groupby操作的輸出是DataFrame,可以使用as_index參數(shù)使它們成為DataFrame中的一列。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

8. 用于分組的多列

就像可以聚合多個列一樣,也可以使用多個列進行分組。

sales.groupby(["store","product_group"], as_index=False).agg(avg_sales = ("last_week_sales", "mean")).head()

python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

9. 排序輸出

可以使用sort_values函數(shù)根據(jù)聚合列對輸出進行排序.

sales.groupby(["store","product_group"], as_index=False).agg(avg_sales = ("last_week_sales", "mean")).sort_values(by='avg_sales', ascending=False).head()

python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

10. 最大的Top N

max函數(shù)返回每個組的最大值。如果需要n個最大的值,可以用下面的方法:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

11. 最小的Top N

與最大值相似,也可以求最小值
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

12. 第n個值

還可以找到一組中的第n個值,例如,找到每個company中年齡第2的薪水:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

13. 第n個值,倒排序

也可以用負的第n項。例如," nth(-2) "返回從末尾開始的第二行。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

14. 唯一值

unique函數(shù)可用于查找每組中唯一的值。例如,可以找到每個company中唯一的年齡,代碼如下:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

15. 唯一值的數(shù)量

可以使用nunique函數(shù)找到每組中唯一值的數(shù)量:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

16. Lambda表達式

可以在agg函數(shù)中使用lambda表達式作為自定義聚合操作
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

17. apply函數(shù)

使用apply函數(shù)將Lambda表達式應(yīng)用到每個組,如下所示:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

18. dropna

缺省情況下,groupby函數(shù)忽略缺失值。如果用于分組的列中缺少一個值,那么它將不包含在任何組中,也不會單獨顯示。所以可以使用dropna參數(shù)來改變這個行為。

首先添加一個缺少存儲值的新行:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
然后計算帶有dropna參數(shù)和不帶有dropna參數(shù)的每個company的平均age,以查看差異。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

19. 求組的個數(shù)

有時需要知道生成了多少組,這可以使用ngroups
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

20. 獲得一個特定分組

get_group函數(shù)可獲取特定組并且返回DataFrame。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

21. rank函數(shù)

rank函數(shù)用于根據(jù)給定列中的值為行分配秩??梢允褂胷ank和groupby函數(shù)分別對每個組中的行進行排序。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

22. 累計操作

可以計算出每組的累計總和:
先創(chuàng)建一個示例dataframe:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
然后單獨創(chuàng)建一個列,包含值列的累計總和,如下所示:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

23. expanding函數(shù)

expanding函數(shù)提供展開轉(zhuǎn)換。但是對于展開以后的操作還是需要一個累計函數(shù)來對其操作。例如它與cumsum 函數(shù)一起使用,結(jié)果將與與sum函數(shù)相同。
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

24. 累積平均

利用展開函數(shù)和均值函數(shù)計算累積平均:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply

25. 展開后的最大值

可以使用expand和max函數(shù)記錄組當前最大值:
python groupby()函數(shù)舉例,Python編程實戰(zhàn)與案例,pandas,python,數(shù)據(jù)分析,groupby,apply
在Pandas中g(shù)roupby函數(shù)與aggregate函數(shù)共同構(gòu)成了高效的數(shù)據(jù)分析工具。文章來源地址http://www.zghlxwxcb.cn/news/detail-776836.html

參考資料

  1. 超好用的Groupby用法詳解
  2. 25個例子學(xué)會Pandas Groupby 操作
  3. 數(shù)據(jù)處理三板斧——map、apply、applymap詳解

到了這里,關(guān)于【Python】Pandas Groupby操作的25個示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python中g(shù)roupby函數(shù)詳解(非常容易懂)

    Python中g(shù)roupby函數(shù)詳解(非常容易懂)

    groupby函數(shù)主要的作用是進行數(shù)據(jù)的分組以及分組后地組內(nèi)運算! 于數(shù)據(jù)的分組和分組運算主要是指groupby函數(shù)的應(yīng)用,具體函數(shù)的規(guī)則如下: 舉例如下: 上面語句的功能是輸出表格所有數(shù)據(jù)中不同地區(qū)不同類型的評分數(shù)據(jù)平均值。 結(jié)果為: 首先,我們有一個變量data,數(shù)據(jù)

    2024年01月16日
    瀏覽(23)
  • pandas筆記:groupby整理

    pandas筆記:groupby整理

    按照Type 聚類,聚類后將同組的Kg屬性合并,求均值 聚合的內(nèi)容可以是 max, min, mean, unique(唯一值), nunique(唯一值數(shù)量),lambda 表達式 ?? ? ?按照Type 聚類,聚類后將同組的Kg、Depth屬性合并,求均值 ? 重命名的名字=(需要操作的列名,需要的操作名) ? ? ? 參考內(nèi)容:

    2024年02月16日
    瀏覽(51)
  • Pandas怎樣實現(xiàn)groupby分組統(tǒng)計

    Pandas怎樣實現(xiàn)groupby分組統(tǒng)計

    一、如何實現(xiàn)分組統(tǒng)計 導(dǎo)入數(shù)據(jù) 二、分組使用聚合函數(shù)做數(shù)據(jù)統(tǒng)計 1、單個列g(shù)roupby,查詢所有數(shù)據(jù)列的統(tǒng)計 我們看到: 2、多個列g(shù)roupby,查詢所有數(shù)據(jù)列的統(tǒng)計 我們看到:(‘A’,‘B’)成對變成了二級索引 3、同時查看多種數(shù)據(jù)統(tǒng)計 4、查看單列的結(jié)果數(shù)據(jù)統(tǒng)計 5、不同列使

    2024年02月09日
    瀏覽(16)
  • 分組聚合不再難:Pandas groupby使用指南

    分組聚合不再難:Pandas groupby使用指南

    處理大量數(shù)據(jù)時,經(jīng)常需要對數(shù)據(jù)進行分組和匯總, groupby 為我們提供了一種簡潔、高效的方式來實現(xiàn)這些操作,從而簡化了數(shù)據(jù)分析的流程。 分組 是指根據(jù)一個或多個列的值將數(shù)據(jù)分成多個組,每個組包含具有相同鍵值(這里的鍵值即用來分組的列值)的數(shù)據(jù)行。 聚合

    2024年03月09日
    瀏覽(26)
  • pandas數(shù)據(jù)分析——groupby得到分組后的數(shù)據(jù)

    pandas數(shù)據(jù)分析——groupby得到分組后的數(shù)據(jù)

    Pandas怎樣實現(xiàn)groupby聚合后字符串列的合并(四十) pandas—groupby如何得到分組里的數(shù)據(jù) 在處理時間序列的數(shù)據(jù)中,有時候會遇到有些日期的數(shù)據(jù)缺失的情況,這時候可以用pandas的 date_range 函數(shù)快速補齊缺失日期,再根據(jù)實際情況補齊缺失值。 常用參數(shù)為: start :指定生成時

    2024年02月11日
    瀏覽(22)
  • 【flink番外篇】9、Flink Table API 支持的操作示例(6)- 表的聚合(group by、Distinct、GroupBy/Over Window Aggregation)操作

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識點,并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年02月02日
    瀏覽(25)
  • 25+ Python 數(shù)據(jù)操作教程(第十一節(jié)PYTHON 中的字符串函數(shù)及示例)

    常用字符串函數(shù)列表 下表顯示了許多常見的字符串函數(shù)及其說明及其在 MS Excel 中的等效函數(shù)。我們在工作場所都使用MS Excel,并且熟悉MS Excel中使用的功能。MS EXCEL和Python中字符串函數(shù)的比較可以幫助你快速學(xué)習(xí)函數(shù)并在面試前做好準備。 功能 描述 MS Excel 函數(shù) 字符串[:N] 從

    2024年02月13日
    瀏覽(28)
  • Pandas.DataFrame.groupby() 數(shù)據(jù)分組(數(shù)據(jù)透視、分類匯總) 詳解 含代碼 含測試數(shù)據(jù)集 隨Pandas版本持續(xù)更新

    Pandas.DataFrame.groupby() 數(shù)據(jù)分組(數(shù)據(jù)透視、分類匯總) 詳解 含代碼 含測試數(shù)據(jù)集 隨Pandas版本持續(xù)更新

    關(guān)于Pandas版本: 本文基于 pandas2.2.0 編寫。 關(guān)于本文內(nèi)容更新: 隨著pandas的stable版本更迭,本文持續(xù)更新,不斷完善補充。 傳送門: Pandas API參考目錄 傳送門: Pandas 版本更新及新特性 傳送門: Pandas 由淺入深系列教程 DataFrame.groupby() 方法用于使用映射器或指定的列,對 D

    2024年01月16日
    瀏覽(18)
  • django groupby踩坑

    django的orm作為簡單查詢 使用簡直是太爽了,所見即所得,但是groupby時候缺有一些坑點 搜索了一圈也沒找到合適的答案。。。 記錄一下 壓根沒參考 https://zhuanlan.zhihu.com/p/627534022

    2024年02月16日
    瀏覽(16)
  • Laravel 集合中 groupBy用法

    居然一直忽略了 groupBy() 這么好用的東西 groupBy 方法根據(jù)指定鍵對集合項進行分組: 你可以傳遞一個回調(diào)函數(shù)用來代替一個字符串的 鍵。這個回調(diào)函數(shù)應(yīng)該返回你希望用來分組的鍵的值: 可以傳遞一個數(shù)組用于多重分組標準。每一個數(shù)組元素將對應(yīng)多維數(shù)組內(nèi)的相應(yīng)級別:

    2024年02月11日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包