Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将具有多个参数的函数传递给DataFrame.apply_Python_Function_Pandas_Multiple Arguments - Fatal编程技术网

Python 将具有多个参数的函数传递给DataFrame.apply

Python 将具有多个参数的函数传递给DataFrame.apply,python,function,pandas,multiple-arguments,Python,Function,Pandas,Multiple Arguments,假设我有这样一个数据帧: df = pd.DataFrame([['foo', 'x'], ['bar', 'y']], columns=['A', 'B']) A B 0 foo x 1 bar y def some_func(row): return '{0}-{1}'.format(row['A'], row['B']) df['C'] = df.apply(some_func, axis=1) df A

假设我有这样一个数据帧:

df = pd.DataFrame([['foo', 'x'], ['bar', 'y']], columns=['A', 'B'])


       A    B
0    foo    x
1    bar    y
def some_func(row):
    return '{0}-{1}'.format(row['A'], row['B'])

df['C'] = df.apply(some_func, axis=1)

df


       A    B        C
0    foo    x    foo-x
1    bar    y    bar-y
我知道如何在涉及数据帧时使用带Apply的单参数函数,如下所示:

df = pd.DataFrame([['foo', 'x'], ['bar', 'y']], columns=['A', 'B'])


       A    B
0    foo    x
1    bar    y
def some_func(row):
    return '{0}-{1}'.format(row['A'], row['B'])

df['C'] = df.apply(some_func, axis=1)

df


       A    B        C
0    foo    x    foo-x
1    bar    y    bar-y
当数据帧涉及多个输入参数时,如何在其上使用apply?下面是我想要的一个例子:

def some_func(row, var1):
    return '{0}-{1}-{2}'.format(row['A'], row['B'], var1)

df['C'] = df.apply(some_func(row, var1='DOG'), axis=1)

df


       A    B            C
0    foo    x    foo-x-DOG
1    bar    y    bar-y-DOG
我不是在寻找解决这一特定示例的变通方法,只是一般来说如何做类似的事情。任何建议都将不胜感激,谢谢。

我想可以

df.apply('-'.join,1)+'-DOG'
Out[157]: 
0    foo-x-DOG
1    bar-y-DOG
dtype: object

这正是您认为的方式,
apply
接受
args
kwargs
并将它们直接传递给
某些函数

df.apply(some_func, var1='DOG', axis=1)
或者


您应该使用矢量化逻辑:

df['C'] = df['A'] + '-' + df['B'] + '-DOG'
如果您真的想使用
df.apply
,这只是一个隐蔽的循环,您只需将参数作为附加参数输入即可:

def some_func(row, var1):
    return '{0}-{1}-{2}'.format(row['A'], row['B'], var1)

df['C'] = df.apply(some_func, var1='DOG', axis=1)
根据,
df.apply
接受位置参数和关键字参数