web-dev-qa-db-ja.com

適用する複数の引数を渡す(Python)

Pythonのコードをクリーンアップして一連の機能をベクトル化しようとしていますが、applyを使用して複数の引数を渡す良い方法があるかどうか疑問に思っています。次の(現在のバージョン)::

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

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

上記では、検索したい各部分文字列_"string"_をテストするために、新しい関数(function_1、function_2など)を作成する必要があります。理想的な世界では、これらの冗長な機能をすべて組み合わせて、次のようなものを使用できます。

_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'))
_
19
mvwi

私はあなたが欲しいと信じています 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"))
14