Pandas:apply方法與lambda、groupby結合、apply多參數傳遞


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

https://blog.csdn.net/messi_james/article/details/80827834

https://blog.csdn.net/qq_19528953/article/details/79348929


免責聲明!

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



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