pandas 的apply() 函數


 

pandas apply() 函數用法

 

 

pandas的apply函數是自動根據function遍歷每一個數據,然后返回一個數據結構為Series的結果

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

參數解釋:

1.func:就是函數,不管是自定義的函數,還是匿名函數lambda

2.axis:0是類,1是行,默認axis=0

例子:

復制代碼
import numpy as np
import pandas as pd 

a=np.arange(1,13).reshape(3,4)
df=pd.DataFrame(a,columns=list('abcd'))

df.apply(lambda x:x.sum())
df.apply(lambda x:x.sum(),axis=1)

#應用於Series數據
df['a'].apply(lambda x:x*x)
復制代碼

 如果是fun的參數是一個字表,也就是groupby之后的字表,這時我們這樣使用

zg_tmp.groupby('label').apply(lambda x:pc.cols_report(x))
#或者是
zg_tmp.groupby('label').apply(pc.cols_report)

apply的使用總共基本用於三處,1是你要對每條記錄進行遍歷去函數計算出一個值,2是你要對某一列進行操作,3是你groupby后要對每個group后的字表df 

df.apply(lambda x:func(x,args**),axis=1)
df.apply(lambda x:func(x,args**),axis=0)
df.groupby([column1]).apply(lambda x:func(x,args**))

df.groupby(“count”).get_group(1)獲得某一組的df
df.groupby(“count”).groups獲得所有組的兩端索引的列表,以索引表示
df.groupby(“count”).indices獲得所有組的兩端索引的列表,以列表表示

如果函數中有多個參數,我們可以使用args=(),括號里面就是除第一個參數外,其余的參數

 

=======================================2021.01.25補充======================================

那么apply應用在Pandas中,其核心功能其實可以概括為一句話:

apply:我本身不處理數據,我們只是數據的搬運工。

apply自身是不帶有任何數據處理功能的,但可以用作是對其他數據處理方法的調度器,至於調度什么又為誰而調度呢?這是理解apply的兩個核心環節:

  • 調度什么?調度的是apply函數接收的參數,即apply接收一個數據處理函數為主要參數,並將其應用到相應的數據上。所以調度什么取決於接收了什么樣的數據處理函數;

  • 為誰調度?也就是apply接收的數據處理函數,其作用對象是誰?或者說數據處理的粒度是什么?答案是數據處理的粒度包括了點線面三個層面:即可以是單個元素(標量,scalar),也可以是一行或一列(series),還可以是一個dataframe

 

理解apply核心在於明確兩個環節:調度函數和作用對象。調度函數就是apply接收的參數,既可以是Python內置的函數,也支持自定義函數,只要符合指定的作用對象(即是標量還是series亦或一個dataframe)即可。而作用對象則取決於調用apply的對象類型,具體來說:

  • 一個Series對象調用apply時,數據處理函數作用於該Series的每個元素上,即作用對象是一個標量,實現從一個Series轉換到另一個Series;

  • 一個DataFrame對象調用apply時,數據處理函數作用於該DataFrame的每一行或者每一列上,即作用對象是一個Series,實現從一個DataFrame轉換到一個Series上;

  • 一個DataFrame對象經過groupby分組后調用apply時,數據處理函數作用於groupby后的每個子dataframe上,即作用對象還是一個DataFrame(行是每個分組對應的行;列字段少了groupby的相應列),實現從一個DataFrame轉換到一個Series上

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM