-1

我想传递向量列以应用于 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

4

2 回答 2

0

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

df_ = df[df.y_true > 1.5]
(df_.y_true - df_.y_pred).abs().mean()
# 0.25
于 2020-01-10T17:02:11.903 回答
0

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

df[df.y_true > 1.5].pipe(lambda x: mae(x.y_true, x.y_pred))
# 0.25
于 2020-03-03T20:44:18.303 回答