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

文章目錄

  • 數據轉換——transform()方法
  • 數據應用——apply()方法


數據轉換——transform()方法

使用aggregate()方法進行聚合運算已經在上一篇博客中詳細闡述,我們知道aggregate()方法返回的數據集的形狀(shape)與被分組的數據集的形狀是不同的,如果希望保持與原數據數據集形狀相同,則可以通過transfrom()方法實現。

transform(self, func, *args, **kwargs)

上述方法中只有一個func參數,表示操作Pandas對象的函數,該函數可以是內置方法也可以是自定義函數。

transform()方法返回的結果有兩種:

  • 一種是可以廣播的標量值(np.mean)
  • 一種可以是與分組大小相同的結果數組

通過transfrom()方法操作分組時,該方法回將func()函數應用到各個分組中,并且將結果放在適當的位置上。

下面通過實例來進一步了解該方法的具體功能。


創建測試對象:

import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(25).reshape(5, 5),index=list([0, 1, 2, 3, 4]),columns=list('abcde'))
df['key'] = pd.Series(data=list('AABBB'), name='key')
print(df)

輸出結果:

    a   b   c   d   e key
0   0   1   2   3   4   A
1   5   6   7   8   9   A
2  10  11  12  13  14   B
3  15  16  17  18  19   B
4  20  21  22  23  24   B

以key列進行分組,可以將df對象拆分成A、B兩組,將mean()方法應用到每個分組中,計算每個分組中每列的平均值。

代碼如下:

df_group = df.groupby('key').transform('mean')
print(df_group)

輸出結果:

      a     b     c     d     e
0   2.5   3.5   4.5   5.5   6.5
1   2.5   3.5   4.5   5.5   6.5
2  15.0  16.0  17.0  18.0  19.0
3  15.0  16.0  17.0  18.0  19.0
4  15.0  16.0  17.0  18.0  19.0

從輸出結果可以看出,每列的數據是各分組求得的平均數。操作過程是通過mean()方法算出均值(一個標準量)后將其廣播。


不難發現上述示例中,原始數據的列數與最終結果的列數是不一樣的。

如果希望原始數據的列數與最終結果的列數是一樣的。那么需要創建一個Series對象作為分組鍵,而不是將原始數據中的列作為分組鍵。

創建測試對象:

df1 = DataFrame(np.arange(20).reshape(5, 4))
print(df1)

輸出結果:

    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
4  16  17  18  19

然后創建一個列表key,key的長度需要與df1對象的行數是一樣的,我們將key當作分組鍵,然后對每個分組執行求平均值的操作。

代碼如下:

key = ['one', 'one', 'two', 'two', 'two']
df1_group = df1.groupby(by=key).transform('mean')
print(df1_group)

輸出結果:

    0   1   2   3
0   2   3   4   5
1   2   3   4   5
2  12  13  14  15
3  12  13  14  15
4  12  13  14  15

數據應用——apply()方法

apply()方法的使用十分靈活,它可以作用于DataFrame中的每一列、每一行元素,還可以在許多標準用例中代替聚合和轉換。

測試對象:

    a   b   c   d   e key
0   0   1   2   3   4   A
1   5   6   7   8   9   A
2  10  11  12  13  14   B
3  15  16  17  18  19   B
4  20  21  22  23  24   B

運用apply()方法的代碼如下:

df_by_group = df.groupby('key')def plus_ten(data_frame):return data_frame.iloc[:, :5] + 10df_by_group_apply = df_by_group.apply(func=plus_ten)
print(df_by_group_apply)

輸出結果:

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

也可以用內置方法進行數據應用:

df1_by_group_apply1 = df.iloc[:, :5].apply(func='mean')
print("df1_apply:\n", df1_by_group_apply1)

輸出結果:

df1_apply:a    10.0
b    11.0
c    12.0
d    13.0
e    14.0
dtype: float64

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

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

相關文章

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函數概念…

類的概念、成員函數的定義方式、類的訪問控制和封裝、類的大小、this指針

文章目錄類的概念structclassclass和struct的區別是什么呢&#xff1f;類中成員函數的兩種定義方式聲明和定義都在類中聲明和定義分離類的訪問控制和封裝類的封裝特性類的大小結構體內存對齊規則類的存儲方式this指針類的概念 在C中&#xff0c;類可以說是最重要的東西&#x…

jQuery實現兩個列表框的值之間的互換:

jQuery實現兩個列表框的值之間的互換&#xff1a; 截圖如下&#xff1a; 代碼如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath reque…