Python之數據聚合——aggregate()方法

文章目錄

  • 使用內置統計方法聚合數據
  • 面向列的聚合方法
    • aggregate()方法
    • 對每一列數據應用同一個函數
    • 對某列數據應用不同的函數
    • 對不同列數據應用不同函數


使用內置統計方法聚合數據

實現數據拆分成組并分別計算平均數的操作

代碼:

import pandas as pd
import numpy as npdf = pd.DataFrame({'key1': ['A', 'A', 'B', 'B', 'A'],'key2': ['one', 'two', 'one', 'two', 'one'],'data1': [2, 3, 4, 6, 8],'data2': [3, 5, np.nan, 3, 7]})
print(df.groupby('key1').mean())

輸出結果:

         data1  data2
key1                 
A     4.333333    5.0
B     5.000000    3.0

可以看到的是,如果參與運算的數據中有NaN值,會自動將這些NaN值過濾掉


面向列的聚合方法

當內置方法無法滿足聚合要求時,可以自定義一個函數,將它傳給agg()方法(pandas 0.20版本后,aggregate()方法與agg()方法用法一樣)。

aggregate()方法

aggregate(self, func=None, *args, **kwargs)

上述方法中部分參數表示的含義如下:

  1. func:表示用于匯總數據的函數,可以為單個函數或函數列表
  2. axis:表示函數作用于軸的方向,0或1,index或columns

通過aggregate()方法進行聚合時,func參數既可以接受Pandas中的內置方法,也可以接受自定義的函數,同時,這些方法與函數可以作用于每一列,也可以將多個函數或方法作用于同一列,還可以將不同函數或方法作用于不同的列


對每一列數據應用同一個函數

創建測試對象:

df1 = DataFrame(np.arange(36).reshape(6, 6),columns=list('abcdef'))
df1['key'] = Series(list('aaabbb'), name='key')
print(df1)

輸出結果:

 a   b   c   d   e   f key
0   0   1   2   3   4   5   a
1   6   7   8   9  10  11   a
2  12  13  14  15  16  17   a
3  18  19  20  21  22  23   b
4  24  25  26  27  28  29   b
5  30  31  32  33  34  35   b

接下來對測試對象以“key“列為分組鍵進行拆分,并通過字典的形式分別打印出每個分組的具體內容。

進行拆分

df1_group = df1.groupby(by='key')
print(dict([i for i in df1_group])['a'])
print(dict([i for i in df1_group])['b'])

輸出結果:

 a   b   c   d   e   f key
0   0   1   2   3   4   5   a
1   6   7   8   9  10  11   a
2  12  13  14  15  16  17   aa   b   c   d   e   f key
3  18  19  20  21  22  23   b
4  24  25  26  27  28  29   b
5  30  31  32  33  34  35   b

上述過程中,先調用groupby()方法,按key一列的數據將df1對象進行分為a、b兩組,然后使用列表推導式([i for i in df1_group])遍歷分組對象df1_group,得到每個分組的列表,之后將裝有分組的列表強轉換為字典,其中字典中的鍵為a和b,字典的值分別為分組的具體內容。之后通過“字典[組名]”的形式,分別查看a、b組數據。


當然也可以用for循環直接兩組一起輸出

for i in df1_group:print(i)

輸出結果

('a',     a   b   c   d   e   f key
0   0   1   2   3   4   5   a
1   6   7   8   9  10  11   a
2  12  13  14  15  16  17   a)
('b',     a   b   c   d   e   f key
3  18  19  20  21  22  23   b
4  24  25  26  27  28  29   b
5  30  31  32  33  34  35   b)


接下來,對每個分組的數據進行聚合運算。

調用內置的求和方法sum():

print("sum:\n", df1_group.aggregate(sum))

輸出結果:

sum:a   b   c   d   e   f
key                        
a    18  21  24  27  30  33
b    72  75  78  81  84  87

自定義一個實現求極差值(極差值 = 最大值 - 最小值)的函數,然后將其作為參數傳入aggregate()方法中:

def range_df1_group(arr):return arr.max() - arr.min()print("極差值:\n", df1_group.aggregate(range_df1_group))

輸出結果:

極差值:a   b   c   d   e   f
key                        
a    12  12  12  12  12  12
b    12  12  12  12  12  12

對某列數據應用不同的函數

如今要求不僅要求出每組數據的極差,還要計算出每組數據的和。這是可將兩個函數的名稱放在列表中,之后在調用aggregate()方法聚合時作為參數傳入即可。

代碼實現:

print("sum and 極差值:\n", df1_group.aggregate(func=[sum, range_df1_group]))

輸出結果:

sum and 極差值:a                   b  ...               e   f                sum range_df1_group sum  ... range_df1_group sum range_df1_group
key                          ...                                    
a    18              12  21  ...              12  33              12
b    72              12  75  ...              12  87              12[2 rows x 12 columns]

從輸出結果可以看出,生成的DataFrame對象具有兩層索引,每個外層列索引包含兩個內層列索引,分別以函數的名稱range_df1_group和sum命名。

雖然每一列可以應用不同的函數,但是結果并不能很直觀地辨別出每個函數代表的意義。為了更好地反映出每列對應地數據的信息, 可以使用“(name,function)”元組將function(函數名)替換為name(自定義名稱)。

代碼實現:

print("極差值 and sum:\n", 
df1_group.aggregate([("極差", range_df1_group), ("和", sum)]))

輸出結果:

極差值 and sum:a       b       c       d       e       f    極差   和  極差   和  極差   和  極差   和  極差   和  極差   和
key                                                
a    12  18  12  21  12  24  12  27  12  30  12  33
b    12  72  12  75  12  78  12  81  12  84  12  87

區別其實就是不會出現列名過長導致的無法顯示全的問題了


對不同列數據應用不同函數

如果希望實現對不同列數據應用不同函數,咋可以在aggregate()方法中傳入一個{“列名”:“函數名”}格式的字典。

代碼實現:

print("綜合:\n", 
df1_group.aggregate({'a': 'sum', 'b': range_df1_group, 'c': 'mean'})

輸出結果:

綜合:a   b   c
key            
a    18  12   8
b    72  12  26

上例中,使用不同的函數對每個分組執行聚合運算,其中a列執行求和運算,b列執行求極差計算,c列執行求平均值計算。自定義函數不需要加引號。


aggregate()方法執行聚合操作時,會將一組標量值參與某些運算后轉換為一個標量值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超硬核十萬字!全網最全 數據結構 代碼,隨便秒殺老師/面試官,我說的

本文代碼實現基本按照《數據結構》課本目錄順序,外加大量的復雜算法實現,一篇文章足夠。能換你一個收藏了吧? 當然如果落下什么了歡迎大家評論指出 目錄 順序存儲線性表實現 單鏈表不帶頭標準c語言實現 單鏈表不帶頭壓縮c語言實現 約瑟…

Python之分組級運算——【transform()方法、apply()方法】

文章目錄數據轉換——transform()方法數據應用——apply()方法數據轉換——transform()方法 使用aggregate()方法進行聚合運算已經在上一篇博客中詳細闡述,我們知道aggregate()方法返回的數據集的形狀(shape)與被分組的數據集的形狀是不同的…

java限制在同一臺電腦上只允許有一個用戶登錄系統

在web應用系統中,出于安全性考慮,經常需要對同一客戶端登錄的用戶數量和一個客戶同時在多個客戶端登陸進行限制。 具體一點就是: 1、在同一臺電腦上一次只允許有一個用戶登錄系統; 2、一個用戶在同一時間只允許在一個客戶端登錄…

Matplotlib——繪制圖表

文章目錄通過figure()函數創建畫布通過subplot()函數創建單個子圖通過subplots()函數創建多個子圖通過add_subplot()方法添加和選中子圖添加各類標簽繪制常見圖表繪制直方圖——hist()函數繪制散點圖——scatter()函數繪制柱狀圖——bar()函數設定線條的相關參數本地保存圖片通…

限制在同一臺電腦上只允許有一個用戶登錄系統

在web應用系統中,出于安全性考慮,經常需要對同一客戶端登錄的用戶數量和一個客戶同時在多個客戶端登陸進行限制。 具體一點就是: 1、在同一臺電腦上一次只允許有一個用戶登錄系統; 2、一個用戶在同一時間只允許在一個客戶端登錄…

Seaborn——繪制統計圖形

文章目錄可視化數據的分布繪制單變量分布繪制雙變量分布繪制成對的雙變量分布用分類數據繪圖類別散點圖通過stripplot()函數畫散點圖swarmplot()函數類別內的數據分布繪制箱型圖繪制提琴圖類別內的統計估計繪制條形圖繪制點圖可視化數據的分布 繪制單變量分布 一般采用最簡單…

Bokeh——交互式可視化庫

文章目錄前言如何通過Plotting繪制圖形前言 Bokeh是一個專門針對Web瀏覽器使用的交互式可視化庫,這是與其他可視化庫相比最核心的區別。 如何通過Plotting繪制圖形 Plotting是以構建視覺符號為核心的接口,可以結合各種視覺元素(例如&#x…

指針、引用以及const限定符、constexpr限定符

文章目錄復合類型引用概念與使用引用的定義注意指針概念聲明方式取地址符指針值空指針利用指針訪問對象賦值和指針void* 指針指向指針的指針指向指針的引用初始化所有指針有多重含義的某些符號const限定符概念const的引用指針和const頂層const和底層constconstexpr和常量表達式…

關鍵字typedef、關鍵字using、auto類型說明符和declytpe類型指示符

文章目錄類型別名概念關鍵字 typedef別名聲明 (alias declaration) using指針、常量和類型別名類型別名簡化多維數組指針auto類型說明符概念復合類型、常量和autodecltype類型指示符概念decltype和引用類型別名 概念 有兩種方法可用于定義類型別名。 關鍵字 typedef typede…

初始化、賦值、默認初始化、列表初始化、類內初始值、直接初始化與拷貝初始化

文章目錄初始化和賦值的區別什么是默認初始化?列表初始化列表初始化的使用場景不適合使用列表初始化的場景類內初始值混用string對象和C風格字符串數組與vector對象關于vector對象兩者間的初始化關系直接初始化與拷貝初始化初始化和賦值的區別 初始化的含義是創建變…

js動態增加,刪除td,tr,table,div

js實現的動態添加,刪除table內容: 截圖如下: 1. 2. 源代碼: main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

string類的相關知識及部分操作

文章目錄string對象的初始化string::size_type類型string對象的讀寫操作使用標準庫中的iostream使用getline讀取一整行string對象的比較操作string對象的相加操作兩個string對象相加字面值和string對象相加string對象的初始化 拷貝初始化(copy initialization):使用…

數組的部分練習

3.27:假設txt_size是一個無參數的函數,它的返回值是int。請回答下列哪個定義是非法的?為什么? unsigned buf_size1024; (a)int ia[buf_size];  (b)int ia[4*7-14]; &#xff08…

關于范圍for語句的使用

文章目錄使用范圍for語句處理多維數組使用范圍for語句處理多維數組 舉個例子&#xff0c;使用范圍for語句輸出多維數組&#xff08;ia&#xff09;所有值&#xff1a; for (const auto &row : ia)for (auto col : row)cout << col << endl;本循環中并沒有任何…

vector的應用練習

文章目錄編寫一段程序&#xff0c;使用條件運算符從vector< int >中找出哪些元素的值是奇數&#xff0c;然后將奇數值翻倍。 #include <iostream> #include <ctime> #include <vector> using namespace std; typedef int int_array[4]; int main() {v…

sizeof運算符運算結果小匯

文章目錄sizeof運算符的結果部分地依賴于其作用的類型sizeof運算符的結果部分地依賴于其作用的類型 對char或者類型為char的表達式執行sizeof運算&#xff0c;結果得1對引用類型執行sizeof運算得到被引用對象所占空間的大小對指針執行sizeof運算得到指針本身所占空間的大小對解…

jQuery實現復選框的全選和反選:

jQuery實現復選框的全選和反選&#xff1a; 截圖如下&#xff1a; 代碼如下&#xff1a; index.jsp: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath…

C語言隱式/顯式類型轉換 | C++四種強制類型轉換、類的隱式轉換、explicit

文章目錄C語言類型轉換隱式類型轉換顯式類型轉換C 強制類型轉換static_castreinterpret_castconst_castdynamic_cast類的隱式類型轉換概念只允許一步類類型轉換explicit 抑制構造函數定義地隱式轉換可以通過顯式轉換使用explicit構造函數C語言類型轉換 隱式類型轉換 編譯器在…

string對象和C風格字符串

混用string對象和C風格字符串 我們都知道允許使用字符串字面值來初始化string對象&#xff1a; string s("Hello World!");C規定&#xff0c;任何出現字符串字面值的地方都可以用以空字符結束的字符數組來替代&#xff1a; 允許使用以空字符結束的字符數組來初始化…

函數重載、引用再探、內聯函數

文章目錄函數重載為什么C支持重載&#xff0c;C語言不支持呢&#xff1f;extern “C”引用再探引用的特性引用的使用場景引用和指針引用和指針的不同點:內聯函數什么是內聯函數&#xff1f;內聯函數的特性內聯函數的好處類的內聯成員函數的聲明內聯函數的使用constexpr函數概念…