Использование лямбда-функций с apply для Pandas DataFrame - PullRequest
0 голосов
/ 04 апреля 2020

Прошу прощения за то, что задал такой тривиальный вопрос, но я продолжаю делать ошибки, когда использую apply function с функцией lambda, которая имеет входные параметры.

См. Ниже:

df = pd.DataFrame([["John",1,3],["James",2,3],
            ["Femi",3,4], ["Rita",3,3],
            ["Rita",3,3]], columns=["Name","Age","Height"])


%timeit df["product_AH"] = df[["Age", "Height"]].apply(lambda x,y: x['Age']*y['Height'], axis=1)

Ожидаемый результат:

    Name    Age  Height  product_AH
0   John    1     3          3
1   James   2     3          6
2   Femi    3     4          12
3   Rita    3     3          9
4   Rita    3     3          9

1 Ответ

1 голос
/ 04 апреля 2020

Если вам нужно использовать вариант «применить», код должен быть:

df['product_AH'] = df.apply(lambda row: row.Age * row.Height, axis=1)

Параметром для применяемой функции является вся строка.

Но гораздо более быстрое решение :

df['product_AH'] = df.Age * df.Height

(1,43 мс, по сравнению с 5,08 мс для варианта «apply»).

Таким образом, вычисления выполняются с использованием векторизации, тогда как apply относится к каждая строка отдельно применяет к ней функцию, затем собирает все результаты и сохраняет их в целевом столбце, что значительно медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...