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