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

How do I use apply in pandas with a function that requires two vectors

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

您要避免使用 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

我找到了我想要的那段代码。使用pipe解决了重新赋值的问题:

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