传递多个参数以应用(Python)

时间:2013-10-02 14:56:47

标签: python apply dataframe

我正在尝试清理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'))

1 个答案:

答案 0 :(得分: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"))