簡體   English   中英

如何為熊貓 groupby 使用多個 lambda 函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM