數據處理技巧 | 帶你了解Pandas.groupby() 常用數據處理方法

2021-02-19 DataCharm

今天我們繼續推出一篇數據處理常用的操作技能匯總:靈活使用pandas.groupby()函數,實現數據的高效率處理,主要內容如下:

pandas.groupby()三大主要操作介紹

說到使用Python進行數據處理分析,那就不得不提其優秀的數據分析庫-Pandas,官網對其的介紹就是快速、功能強大、靈活而且容易使用的數據分析和操作的開源工具(pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool)。相信很多小夥伴都使用過,今天我們就詳細介紹下其常用的分組(groupby)功能。大多數的Pandas.GroupBy() 操作主要涉及以下的三個操作,該三個操作也是pandas. GroupBy()的核心,分別是:

第二步:在每個分離後的子對象上進行數據操作函數應用(Applying);第三步:將每一個子對象的數據操作結果合併(Combining)。

而在Applying操作步驟中還可以進行以下數據操作處理:

聚合(Aggregation)處理:進行如平均值(mean)、最大值(max)、求和(sum)等一些統計性計算。轉換(Transformation)操作:執行一些特定於個別分組的數據處理操作,最常用的為針對不同分組情況選擇合適的值填充空值;篩選(Filtration)操作:這一數據處理過程主要是去除不符合條件的值,如根據均值和特定值篩選數據。

接下來我們通過具體的例子對各個步驟進行講解。

pandas.groupby()實例演示

首先,我們自己創建用於演示的數據,代碼如下:

import pandas as pd 
import numpy as np
# 生成測試數據
test_data = {'Team': ['A', 'A', 'B', 'B', 'C','D', 'D', 'D', 'A', 'E', 'E', 'A'],
             'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
             'values01':[876,789,863,673,741,812,756,788,694,701,804,690],
             'values02': [120, 208, 250, 330, 430,240 ,710 ,190,252 , 364,197,288]}
test_dataest = pd.DataFrame(test_data)
test_dataest

數據如下:

test_data

Splitting 分離操作

首先我們根據單一變量進行分組,如按照Team列進行分組,代碼如下:

grouped = test_dataest.groupby('Team')
grouped

#<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000014A2F049A00>

返回的是一個DataFrameGroupBy object,當然,我們也可以兩個或兩個以上的變量進行分組操作:

grouped2 = test_dataest.groupby(["Team","Year"])
grouped2

返回同樣是分組對象,那麼我們如何查看分組後的各個小組的情況 以及分組後的屬性呢?代碼操作如下:

# 查看分組後的小組個數
len(grouped)
# 返回各個小組的情況
grouped.groups
#{'A': [0, 1, 8, 11], 'B': [2, 3], 'C': [4], 'D': [5, 6, 7], 'E': [9, 10]}
#注意:上面返回的數字為其對應的索引數(index)

而當我們需要查看具體某一個小組的情況時,我們可是使用如下方法:

# 獲取A分組的情況
grouped.get_group("A")

結果如下:

查看A分組情況

Applying數據計算操作

一旦分組後,我們就可對分組後的對象進行Applying應用操作,這部分最常用的就是Aggregations摘要統計類的計算了,如計算平均值(mean),和(sum)等,下面我們通過實例解釋:還是以上方數據為主,這次我們根據Year列進行分組:

grouped = test_dataest.groupby("Year")

在對分組後的grouped對象,我們使用aggregate()方法進行數據計算:

grouped = grouped.aggregate(np.sum)
grouped

aggregate操作

或者直接使用:

grouped = test_dataest.groupby("Year").sum()

結果都是一樣的。

如果我們對多列數據進行Applying操作,同樣還是計算和(sum),代碼如下:

grouped2 = test_dataest.groupby(["Team","Year"]).aggregate(np.sum)
grouped2


aggregate對多列操作

除了sum()求和函數外,我們還列舉幾個pandas常用的計算函數,具體如下表:

函數(Function)描述(Description)mean()計算各組平均值size()計算分組大小count()計算組個數std()分組的標準偏差var()計算分組的方差describe()生成描述性統計min()計算分組值的最小值max()計算分組值的最大值

可能有小夥伴問了,能不能對每一個分組結果計算多個結果值?即同時計算平均值(mean)、求和(sum)。答案是當然可以的。如我們同時計算均值和和,代碼如下:

grouped2 = test_dataest.groupby(["Team","Year"]).aggregate([np.mean,np.sum])
grouped2

注意:aggregate()中使用列表將多個計算函數列出,即可計算多個結果了,結果如下:

同時計算多個結果

可能還有小夥伴問「能不能將聚合計算之後的新的結果列進行重命名呢?」,該操作在實際工作中經常應用的到,如:根據某列進行統計,並將結果重新命名。在pandas以前的版本中需要自定義聚合操作,如下:

# 定義aggregation匯總計算
aggregations = {
    #在values01列上的操作
    'values01': { 
        #獲取sum結果,並將該結果命名為 total_result
        'total_result': 'sum',  
        #獲取mean結果,並將該結果命名為 average_result
        'average_result': 'mean', 
        #獲取count統計結果,並將該結果命名為 num_result
        'num_result': 'count'
    },
    # 在values02列上的操作
    'values02': {     
        # Find the max, call the result "max_date" 
        'max_value': 'max',           
        'min_value': 'min',
        #計算最大最小值差
        'max-min': lambda x: max(x) - min(x)  
    }
}

#應用剛剛自己定義的aggregations
grouped4 = test_dataest.groupby(["Team"]).agg(aggregations)

而在 Pandas 0.25.0.版本後新增「named aggregation」操作,即對agg的結果進行重新命名,不必再自己定義了。則以上代碼可更換如下:

grouped4 = test_dataest.groupby(["Team"]).agg(
    total_result = ("values01","sum"),
    average_result = ("values01","mean"),
    num_result = ("values01","count"),
    max_value = ("values02","max"),
    min_value = ("values02","min"),
    max_min = ("values02",lambda x: max(x) - min(x))
)
grouped4

計算結果如下:

重命名agg結果

接下來,我們再介紹Transformation(轉換),這裡我們舉一個例子即可:

grouped = test_dataest.groupby(["Year"])
score = lambda x: (x - x.mean()) / x.std()
trans_result = grouped.transform(score)
trans_result

結果如下:

Transform操作

這樣我們就可以使每個分組中的平均值為0,標準差為1了。該步驟日常數據處理中使用較少,大家若想了解更多,請查看Pandas官網。

最後一個 Applying 方法為篩選數據(Filtration),顧名思義,就是對所操作的數據集進行過濾操作。這裡舉一個例子大家就能明白了,即我們以Team列進行分組,並且希望我們的分組結果中每一組的個數都大於3,我們該如何分組呢?練習數據如下:

test_dataest

實現上述要求的代碼操作如下:

groupby5 = test_dataest.groupby('Team').filter(lambda x: len(x) >= 3)

結果就是將分組後小組個數大於3的數據篩選出來,如下:

Filtration Result

以上就是對Pandas.groupby()操作簡單的講解一遍了,當然,還有更詳細的使用方法沒有介紹到,這裡只是說了我自己在使用分組操作時常用的分組使用方法。

總結

這是第二篇關於數據處理小技巧的推文,本期介紹了Pandas.groupby()分組操作方法,重點介紹了幾個常用的數據處理方法,希望可以幫助到大家,接下來我會繼續總結日常數據處理過程中的小技巧,幫助大家總結那些不起眼但是經常遇到的數據處理小Tips





相關焦點

  • Pandas常用的數據處理方法
    >Pandas中合併數據集有多種方式,這裡我們來逐一介紹1.1 資料庫風格合併資料庫風格的合併指根據索引或某一列的值是否相等進行合併的方式,在pandas中,這種合併使用merge以及join函數實現。
  • Python數學建模技巧之pandas數據處理
    最常見的庫有進行矩陣運算的Numpy、進行數據處理的pandas、進行科學計算的Scipy、進行圖形繪製及科學可視化的matplotlib、進行符號計算的Sympy以及方便進行機器學習任務的Sklearn。由於今年美賽官方公告中稱,將會提前在賽題公布之前就提供下載C題數據集的方式。
  • 數據處理技巧 | 一次性匯總了30+字符串常用處理方法
    今天這篇推文我們就匯總下Python中常用的字符串處理小技巧,字符串在Python數據處理中是非常常見且極易忽略的常用數據類型,且Python本身也提供大量運算符、函數和方法來處理字符串。話不多說,接下來我們就匯總下字符串處理小技巧(ps:都是小編經常用到的處理技巧,可能不是很全哦)字符串常用操作這個操作相對簡單,就是對字符串進行組合,如下:a = "Data"b = "Charm"print(a+b) # DataCharm
  • pandas+PyQt5輕鬆製作數據處理工具
    作者:才哥由於在工作中需要處理很多日誌文件數據,這些數據並不存在於資料庫,而是以每日1個單文件的形式存在,為了讓我們在日常數據處理中更方便的進行一些基礎的數據合併、清洗篩選以及簡單的分組或數據透視處理,結合PyQt5與pandas庫,製作了一個簡單的數據處理可視化工具。
  • 關於Pandas數據處理你不知道的技巧!
    旗下高端量化雲平臺當我們參加一些比賽時,我們可能要花費大量時間來處理數據。本文將由淺到深,為大家講解關於Pandas在數據清理和處理的一些技巧!這對於行數較少的數據集是非常不利的,在這些數據集中刪除所有缺失值的行會導致我們丟失必要的信息。在這種情況下,我們可以使用 pandas.Datafram.fillna() 方法來使用指定的方法填充NA/NaN值。用某個固定值填充所有NA/NaN的最簡單方法,例如0。
  • pandas讀取表格後的常用數據處理操作
    pandas讀取表格後的一些常用數據處理操作。這篇文章其實來源於自己的數據挖掘課程作業,通過完成老師布置的作業,感覺對於使用python中的pandas模塊讀取表格數據進行操作有了更深層的認識,這裡做一個整理總結。
  • 對比MySQL學習Pandas的groupby分組聚合
    (ID:alltodata)如若轉載請聯繫原公眾號1)都是用來處理表格數據不管是mysql,還是pandas,都是處理像excel業界處理像excel那樣的二維表格數據,通常有如下兩種風格:* DSL風格:使用面向對象的方式來操作,pandas就是採用這種方式,通俗說就是「語法順序和執行順序一致」。
  • 使用Pandas數據處理與分析
    :1.導入數據自我生成數據pandas 有兩個常用的數據結構:Series 和 DataFrame,可以用來生成你想要的數組型對象。表1對我們常用的文件格式進行了總結,其中pd.read_csv()和pd.read_excel()可能會是你今後用得最多的。
  • python數據分析之pandas常用命令整理
    pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使Python成為強大而高效的數據分析環境的重要因素之一。
  • Pandas中groupby的這些用法你都知道嗎?
    groupby是pandas中用於數據分析的一個重要功能,其功能與SQL中的分組操作類似,但功能卻更為強大。理解gro理解groupby的原理可參考官網給出的解釋:其中:groupby首先要指定分組原則,這也是groupby函數的第一步,其常用參數包括:by,分組欄位,可以是列名/series/字典/函數,常用為列名axis,指定切分方向,默認為0,表示沿著行切分as_index,是否將分組列名作為輸出的索引,默認為True;當設置為
  • 【數據分析】Pandas
    數據分組和聚合其他常用方法                ✦ ✦ ✦ ✦ ✦ ✦1、簡介pandas是一個強大的pip install pandas引用方法:import pandas as pd2、SeriesSeries是一種類似於一維數組的對象,由一組數據和一組與之相關的數據標籤(索引)
  • Pandas數據處理120題,你在第幾層?
    作者|劉早起Pandas進階修煉120題系列一共涵蓋了數據處理、計算、可視化等常用操作,希望通過120道精心挑選的習題吃透pandas。
  • 使用Pandas進行數據處理
    引言我們將深入講解pandas庫在數據處理階段的功能數據處理又可以細分為三個階段,我們將通過例子詳細講解各個階段都會涉及哪些操作,以及如何充分利用pandas庫提供的函數來完成這些操作。數據處理的三個階段為:數據準備、數據轉換和數據聚合。數據準備開始處理數據工作之前,需要先行準備好數據,把數據組裝成便於用pandas庫的各種工具處理的數據結構。
  • 數據分析工具篇——pandas高效函數
    接上篇文章,我們把pandas的常用方法做深一步分解,上文我們主要描述了類SQL的查詢功能,本文我們來了解一下剩下的刪、改操作和一些高效的函數
  • Python數據處理庫pandas入門教程
    pandas是一個Python語言的軟體包,在我們使用Python語言進行機器學習編程的時候,這是一個非常常用的基礎編程庫。
  • pandas100個騷操作:transform 數據轉換的 4 個常用技巧!
    本次給大家介紹一個功能超強的數據處理函數transform,相信很多朋友也用過,東哥這裡再次進行詳細分享下。transform有4個比較常用的功能,總結如下:一.轉換數值pd.transform(func, axis=0)以上就是transform轉換數值的基本用法,參數含義如下:func是指定用於處理數據的函數,它可以是普通函數、字符串函數名稱、函數列表或軸標籤映射函數的字典。1.
  • 用pandas處理時間格式數據
    本文2023字,預計閱讀需10分鐘;我們在處理時間相關的數據時有很多庫可以用,最常用的還是內置的datetime、time這兩個。
  • Pandas的GroupBy機制
    首先,導入所需庫與所用數據。這裡用到的數據為鐵達尼號遇難乘客數據集,為了展示的方便,對導入的數據進行處理只保留所感興趣的數據,查看數據基本概貌。如果想根據分組對具體的某一列數據進行分析,在分組後選擇所需的列即可。還可以通過傳入 agg方法選擇所需的函數。
  • pandas | 使用pandas進行數據處理——DataFrame篇
    今天是pandas數據處理專題的第二篇文章,我們一起來聊聊pandas當中最重要的數據結構——DataFrame。並且為我們提供了許多表級別數據處理以及批量數據處理的接口,大大降低了數據處理的難度。如果是在實際的工作場景,雖然數據不會存在文件當中,但是也會有一個源頭,一般是會存儲在一些大數據平臺當中,模型從這些平臺當中獲取訓練數據。所以總體來說,我們很少使用其他創建DataFrame的方法,我們有所了解,著重掌握從文件讀取的方法即可。
  • Pandas對文本數據處理
    在處理數據的時候,對數值型的數據處理還是比較方便的,但是有時候數值型數據出現問題後就會比較頭痛了,因為文本數據的排列組合可是有很多很多的,今天我們就學習一下如何對文本數據進行處理,這樣我們接下來在工作中遇到了這些情況就可以少掉一下頭髮啦。