python pandas: применить функцию с аргументами к ряду. Обновить

Я хотел бы применить функцию с аргументом к серии pandas: я нашел два разных решения SO:

python pandas: применить функцию с аргументами к ряду

а также

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

оба они полагаются на использование functool.partial и они работают абсолютно нормально. Кстати, новая версия Pandas поддерживает несколько аргументов: в любом случае я не понимаю, как это работает. Пример:

 a=pd.DataFrame({'x':[1,2],'y':[10,20]}) a['x'].apply(lambda x,y: x+y, args=(100)) 

Он выходит с:

 TypeError: <lambda>() argument after * must be a sequence, not int 

TypeError говорит, что вы передали неправильный тип функции lambda x + y . Он ожидает, что args будет последовательностью, но он получил int . Вы могли подумать, что (100) был кортежем (последовательность), но в python это запятая, которая делает кортеж:

 In [10]: type((100)) Out[10]: int In [11]: type((100,)) Out[11]: tuple 

Поэтому измените свою последнюю строку на

 In [12]: a['x'].apply(lambda x, y: x + y, args=(100,)) Out[12]: 0 101 1 102 Name: x, dtype: int64