欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas groupby apply agg 的區(qū)別 運行自定義函數(shù)說明

 更新時間:2021年03月26日 09:34:03   作者:青盞  
這篇文章主要介紹了Pandas groupby apply agg 的區(qū)別 運行自定義函數(shù)說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

agg 方法將一個函數(shù)使用在一個數(shù)列上,然后返回一個標(biāo)量的值。也就是說agg每次傳入的是一列數(shù)據(jù),對其聚合后返回標(biāo)量。

對一列使用三個函數(shù):

對不同列使用不同函數(shù)

apply 是一個更一般化的方法:將一個數(shù)據(jù)分拆-應(yīng)用-匯總。而apply會將當(dāng)前分組后的數(shù)據(jù)一起傳入,可以返回多維數(shù)據(jù)。

實例:

1、數(shù)據(jù)如下:

lawsuit2[['EID','LAWAMOUNT','LAWDATE']]

2、groupby后應(yīng)用apply傳入函數(shù)數(shù)據(jù)如下:

lawsuit2[['EID','LAWAMOUNT','LAWDATE']].groupby(['EID']).apply(lambda df:print(df))

3、如果使用agg,對于兩列可以處理,但對于上面的三列,打印數(shù)據(jù)如下:

lawsuit2[['EID','LAWAMOUNT','LAWDATE']].groupby(['EID']).agg(lambda df:print(df))

可以看到agg傳入的只有一列數(shù)據(jù),如果我們使用df加列下表強行取值也能取到,但是有時會出現(xiàn)各種keyError問題。

4、完整代碼:

判斷最近一次日期的花費是否是所有的花費中最大花費。

def handle(df):
#   print(df)
# 找最大日期
  maxdate = df['LAWDATE'].max()
# 找最大費用
  left = df[ df['LAWDATE']==maxdate ]['LAWAMOUNT'].max()
# 取ID
  EID = df['EID'].values[0]
#   print(EID)
# 從已存在的表中根據(jù)EID找到最大費用
  right = LAW_AMOUNT_MAX.loc[EID,'LAW_AMOUNT_MAX']
# 判斷費用是否相等
  if left==right:
    return 1
  else:
    return 0
    
LAW_AMOUNT_MAX_IS_LAST = lawsuit2[['EID','LAWAMOUNT','LAWDATE']].groupby(['EID']).apply(handle)

其他注意點:

在groupby后使用apply,如果直接返回,會出現(xiàn)有多余的groupby索引問題,可以使用group_keys解決:

orgin = reviews_df.sort_values(["reviewerID","unixReviewTime"]).groupby("reviewerID",group_keys=False)
train = orgin.apply(lambda df: df[:-2])
train.head()

補充:pandas分組聚合運算groupby之a(chǎn)gg,apply,transform

groupby函數(shù)是pandas中用以分組的函數(shù),可以通過指定列來進行分組,并返回一個GroupBy對象。對于GroupBy對象的聚合運算,其有經(jīng)過優(yōu)化的較為常用的sum,mean等函數(shù),但是如果我們需要用自定義的函數(shù)進行聚合運算,那么就需要通過agg,apply,transform來實現(xiàn)。

agg,apply和transform三者之間的區(qū)別在于:1、agg和transform之間的區(qū)別為:前者經(jīng)過聚合后,只會在該組單列中返回一個標(biāo)量值,而transform則會將該標(biāo)量值在該組單列內(nèi)進行廣播,保持原DataFrame的索引不變;2、agg和transform中的函數(shù)參數(shù)是以分組后的單列(Series)為操作對象的,即傳入agg和transform的函數(shù)的參數(shù)是列,而apply中的函數(shù)參數(shù)是分組后整個的DataFrame。下面分別對這兩點進行說明。

一、agg和transform

如下代碼所示,構(gòu)造一個df,agg和transform中l(wèi)ambda函數(shù)的input都為單列,但是agg返回的索引是分組的key的唯一值,而transform返回的索引和原df一樣,但是相比于agg返回的結(jié)果,發(fā)現(xiàn)transform只是在d行處的值進行了重復(fù)的廣播,這個目的就是維持原df的索引不變,且被拿來分組的列會被剔除。

df
Out[1]:
 index a b c
0   d 0 1 2
1   d 3 4 5
2   e 6 7 8
 
df.groupby(by='index').agg(lambda x:x.shape)
Out[2]: 
     a   b   c
index         
d   (2,) (2,) (2,)
e   (1,) (1,) (1,)
 
df.groupby(by='index').transform(lambda x:x.shape)
Out[3]: 
   a   b   c
0 (2,) (2,) (2,)
1 (2,) (2,) (2,)
2 (1,) (1,) (1,) 

二、agg和apply

下面的是apply的結(jié)果,相比于上面agg的結(jié)果,可以發(fā)現(xiàn),實際上lambda函數(shù)的input不再是一個Series,而是分組后的整個DataFrame。

dd.groupby(by='index').apply(lambda x:x.shape)
Out[4]: 
index
d  (2, 4)
e  (1, 4)

三、其他注意點

對于agg函數(shù),其不僅可以傳入一個函數(shù)對每列執(zhí)行相同的操作,還可以傳入一個字典{'col_name':func},來對不同的列做不同的操作,也可以將func替換為由多個不同的函數(shù)組成的list,實現(xiàn)對同一列做多個不同的操作,這是agg函數(shù)最為靈活的地方。

這三個函數(shù),參數(shù)形式都為(func, *args,**kwargs),所以可以通過位置參數(shù)和關(guān)鍵字參數(shù)給func傳遞額外的參數(shù)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 詳解Python裝飾器由淺入深

    詳解Python裝飾器由淺入深

    裝飾器的功能在很多語言中都有,名字也不盡相同,其實它體現(xiàn)的是一種設(shè)計模式,強調(diào)的是開放封閉原則,更多的用于后期功能升級而不是編寫新的代碼。本文盡量描述得淺顯易懂,從最基礎(chǔ)的內(nèi)容講起。
    2016-12-12
  • 在Python的Django框架中實現(xiàn)Hacker News的一些功能

    在Python的Django框架中實現(xiàn)Hacker News的一些功能

    這篇文章主要介紹了在Python的Django框架中實現(xiàn)Hacker News的一些功能,包括投票“頂”評論等功能,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)設(shè)計模式之單例模式詳解

    Python實現(xiàn)設(shè)計模式之單例模式詳解

    這篇文章主要介紹了Python實現(xiàn)設(shè)計模式之單例模式詳解,設(shè)計模式是指軟件設(shè)計問題的推薦方案,設(shè)計模式一般是描述如何組織代碼和使用最佳實踐來解決常見的設(shè)計問題,需謹記一點:設(shè)計模式是高層次的方案,并不關(guān)注具體的實現(xiàn)細節(jié),比如算法和數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2023-09-09
  • Python 之 Json序列化嵌套類方式

    Python 之 Json序列化嵌套類方式

    今天小編就為大家分享一篇Python 之 Json序列化嵌套類方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python基于socket模擬實現(xiàn)ssh遠程執(zhí)行命令

    python基于socket模擬實現(xiàn)ssh遠程執(zhí)行命令

    這篇文章主要介紹了python基于socket模擬實現(xiàn)ssh遠程執(zhí)行命令,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • Python NumPy中的隨機數(shù)及ufuncs函數(shù)使用示例詳解

    Python NumPy中的隨機數(shù)及ufuncs函數(shù)使用示例詳解

    這篇文章主要介紹了Python NumPy中的隨機數(shù)及ufuncs函數(shù)使用,ufunc函數(shù)是NumPy中的一種通用函數(shù),它可以對數(shù)組中的每個元素進行操作,而不需要使用循環(huán)語句,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明

    Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明

    這篇文章主要介紹了Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 安裝多個版本的TensorFlow的方法步驟

    安裝多個版本的TensorFlow的方法步驟

    這篇文章主要介紹了安裝多個版本的TensorFlow的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Keras 在fit_generator訓(xùn)練方式中加入圖像random_crop操作

    Keras 在fit_generator訓(xùn)練方式中加入圖像random_crop操作

    這篇文章主要介紹了Keras 在fit_generator訓(xùn)練方式中加入圖像random_crop操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python學(xué)習(xí)之基礎(chǔ)語法介紹

    Python學(xué)習(xí)之基礎(chǔ)語法介紹

    大家好,本篇文章主要講的是Python學(xué)習(xí)之基礎(chǔ)語法介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論