[英]How to use multiple lambda function for a pandas groupby
我正在為具有多個組的數據框計算各種評估指標。 這是我的代碼
import pandas as pd
from sklearn.metrics import mean_squared_error, median_absolute_error
temp = pd.DataFrame({"group":['A','A','B','B'],"actual":[10,2,3,4],"pred":[0,1,2,3]})
temp.groupby("group").apply(lambda x : mean_squared_error(x['actual'],x['pred'])).to_frame('MSE').reset_index()
group MSE
0 A 50.5
1 B 1.0
temp.groupby("group").apply(lambda x : median_absolute_error(x['actual'],x['pred'])).to_frame('MAE').reset_index()
group MAE
0 A 5.5
1 B 1.0
如果我有 5 個指標,那么我需要編寫 groupby + apply 5 次,或者作為循環執行。 但是有沒有從 Pandas 中調用多個應用程序在單個 groupby 對象中的本地方法?
也許是這樣的:
temp.groupby("group").agg({"MAE": lambda x : median_absolute_error(x['actual'],x['pred']),"MSE": lambda x : mean_squared_error(x['actual'],x['pred'])})
group MSE MAE
0 A 50.5 5.5
1 B 1.0 1.0
代碼是錯誤的,但我認為你明白我想要做什么。
嘗試從groupby apply
返回一個Series
:
new_df = temp.groupby("group", as_index=False).apply(
lambda x: pd.Series({'MSE': mean_squared_error(x['actual'], x['pred']),
'MAE': median_absolute_error(x['actual'], x['pred'])})
)
new_df
:
group MSE MAE
0 A 50.5 5.5
1 B 1.0 1.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.