Как использовать применение в pandas с функцией, которая требует двух векторов - PullRequest
0 голосов
/ 10 января 2020

Я хочу передать векторные столбцы для применения в 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

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Я нашел кусок кода, который хотел. Использование pipe решает проблему переназначения:

df[df.y_true > 1.5].pipe(lambda x: mae(x.y_true, x.y_pred))
# 0.25
0 голосов
/ 10 января 2020

Вы хотите избежать использования apply для этих простых вычислений, поскольку это просто syntacti c sugar для python level for. Просто индексируйте ваш фрейм данных, где df.y_true > 1.5, и вычислите mae как:

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