21

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

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


       A    B
0    foo    x
1    bar    y

当涉及到数据帧时,我知道如何将单个参数函数与 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

当涉及多个输入参数时,如何在数据帧上使用应用?这是我想要的一个例子:

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

我不是在寻找解决这个特定示例的变通方法,而是在寻找通常如何做这样的事情。任何建议将不胜感激,谢谢。

4

3 回答 3

20

这只是您认为的方式,apply接受args并将kwargs它们直接传递给some_func.

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

或者,

df.apply(some_func, args=('DOG', ), axis=1)

0    foo-x-DOG
1    bar-y-DOG
dtype: object
于 2018-03-12T14:29:58.357 回答
4

您应该使用矢量化逻辑:

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)

根据docsdf.apply接受位置参数和关键字参数。

于 2018-03-12T14:30:15.427 回答
2

我觉得可以

df.apply('-'.join,1)+'-DOG'
Out[157]: 
0    foo-x-DOG
1    bar-y-DOG
dtype: object
于 2018-03-12T14:29:09.640 回答