Pandas的apply函數用起來很方便,特別是與groupby、lambda結合使用時更簡便。
1. 首先創建DataFrame數據:
import pandas as pd import numpy as np df = pd.DataFrame({'name':['Jack','Alex','Bob','Nancy','Mary','Alice','Jerry','Wolf'], 'course':['Chinese','Math','Math','Chinese','Math','English','Chinese','English'], 'grade':[1,1,2,2,2,2,3,3], 'score':[85,95,91,78,89,60,87,79]})
2. 單獨使用lambda:
vv = df.apply(lambda x:x['score'],axis=1) #axis用於指定每次傳入的是行數據 print('vv:',vv)
3. 進行groupby分組聚合:
group_data = df.groupby('course') #groupby分組方法 for course,group in group_data: print(course) print(group)
4. 結合apply和lambda函數:
# apply方法也可用在Series上 # 對結果應用apply方法,則會對每一組執行describe() ss = group_data.apply(lambda x:x.describe()) #相當於執行function print(ss)
5. 對組合塊結果進行操作運算:lambda(分別每個塊)
# 對組合塊結果進行操作運算 tt = group_data.apply(lambda y:np.mean(y['score'])) print(tt)
6. 可使用自定義函數
def test_apply(x, column='score'): return x[column] uu = group_data.apply(test_apply) print(uu)
7. 當自定義函數是多參數,且無默認值時,有三種方法傳遞參數,df 數據來自上面 ~~
i = 0 def test_apply(x,column,mean_v): global i print(i+1) print(mean_v) i = i+1 return x[column] print('fffffff') # 方法一,關鍵字傳遞 # axis=1,表示對每行apply作用; uu = df.apply(test_apply,axis=1,column='score',mean_v=100) # axis=0 default,表示對每列apply作用; print('uu:',uu) print('sssssss') # 方法二,參數收集之元組傳遞 uu = df.apply(test_apply,axis=1,args=('score',100)) print('uu:',uu) print('tttttttt') # 方法三,參數收集之字典收集 dict_ = {'column':'score','mean_v':100} uu = df.apply(test_apply,axis=1,**dict_) #也可以直接:**{'column':'score', 'mean_v':100} print('uu:',uu)
參考:
https://www.cnblogs.com/happymeng/p/11056437.html