如何在需要两个向量的函数中使用apply in pandas

2024-03-28 13:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想传递向量列以应用于pandas数据帧,以下是一个简化:

def mae(y_true, y_pred):
    return (y_true - y_pred).abs().mean()

df = pd.DataFrame({"y_true": [1.1, 2, 3], "y_pred": [2, 2.5, 3]})
df[df.y_true > 1.5].apply(lambda x: mae(x.y_true, x.y_pred), axis=1)

它给出了一个包含或不包含axis=1的错误。 我想避免走漫长的路

df_filtered = df[df.y_true > 1.5]
mae(df_filtered.y_true.values, df_filtered.y_pred.values)

这可能很简单,但我做了一些研究,不知道怎么做。返回的值应为0.25


Tags: 数据truepandasdfreturndefabsmean
2条回答

您希望避免在这些简单的计算中使用apply,因为它只是python级别for的语法糖。只需将您的数据帧索引到df.y_true > 1.5,并将mae计算为:

df_ = df[df.y_true > 1.5]
(df_.y_true - df_.y_pred).abs().mean()
# 0.25

我找到了我想要的代码。使用管道解决了重新分配的问题:

df[df.y_true > 1.5].pipe(lambda x: mae(x.y_true, x.y_pred))
# 0.25

相关问题 更多 >