Подтвердить что ты не робот

Передача нескольких аргументов для применения (Python)

Я пытаюсь очистить некоторый код в Python, чтобы векторизовать набор функций, и мне интересно, есть ли хороший способ применить для передачи нескольких аргументов. Рассмотрим следующую (текущую версию):

def function_1(x):
    if "string" in x:
        return 1
    else:
        return 0

df['newFeature'] = df['oldFeature'].apply(function_1)

С приведенным выше я должен написать новую функцию (function_1, function_2 и т.д.), чтобы проверить каждую подстроку "string", которую я хочу найти. В идеальном мире я мог бы объединить все эти избыточные функции и использовать что-то вроде этого:

def function(x, string):
    if string in x:
        return 1
    else:
        return 0

df['newFeature'] = df['existingFeature'].apply(function("string"))

Но попытка вернуть ошибку TypeError: function() takes exactly 2 arguments (1 given) Есть ли другой способ выполнить одно и то же?

Edit:

def function(string, x):
    if string in x:
        return 1
    else:
        return 0

df['newFeature'] = df['oldFeature'].apply(partial(function, 'string'))
4b9b3361

Ответ 1

Я считаю, что вы хотите functools.partial. Демонстрация:

>>> from functools import partial
>>> def mult(a, b):
...     return a * b
...
>>> doubler = partial(mult, 2)
>>> doubler(4)
8

В вашем случае вам нужно сменить аргументы в function (из-за идеи partial), а затем просто

df['existingFeature'].apply(partial(function, "string"))