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

Mic*_*nry 9 python function pandas multiple-arguments

假设我有一个像这样的数据框:

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


       A    B
0    foo    x
1    bar    y
Run Code Online (Sandbox Code Playgroud)

对于数据帧,我知道如何在Apply中使用单个参数函数,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

当数据框包含多个输入参数时,如何使用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
Run Code Online (Sandbox Code Playgroud)

我不是在寻找解决此特定示例的变通方法,而只是在一般情况下如何执行此操作。任何建议将不胜感激,谢谢。

cs9*_*s95 7

这是现在的样子,你认为这将是,apply接受argskwargs直接传递它们some_func

df.apply(some_func, var1='DOG', axis=1)
Run Code Online (Sandbox Code Playgroud)

要么,

df.apply(some_func, args=('DOG', ), axis=1)
Run Code Online (Sandbox Code Playgroud)

0    foo-x-DOG
1    bar-y-DOG
dtype: object
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 7

您应该使用向量化逻辑:

df['C'] = df['A'] + '-' + df['B'] + '-DOG'
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用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)
Run Code Online (Sandbox Code Playgroud)

根据文档df.apply接受位置参数和关键字参数。

  • 对于这个特定示例,您对向量化逻辑的建议是正确的。但无论如何,感谢您回答确切的问题:)。 (2认同)