19

我正在尝试清理 Python 中的一些代码以矢量化一组功能,我想知道是否有一种使用 apply 传递多个参数的好方法。考虑以下(当前版本):

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)是否有另一种方法可以完成同样的事情?

编辑:

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

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

1 回答 1

14

相信你想要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"))
于 2013-10-02T15:01:47.410 回答