将具有多个参数的函数传递给 DataFrame.apply
Passing a function with multiple arguments to DataFrame.apply
假设我有这样一个数据框:
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
我不是在寻找解决这个特定示例的变通方法,只是在寻找一般情况下如何做这样的事情。任何建议将不胜感激,谢谢。
我觉得可以
df.apply('-'.join,1)+'-DOG'
Out[157]:
0 foo-x-DOG
1 bar-y-DOG
dtype: object
这就是你想的那样,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
您应该使用矢量化逻辑:
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)
根据 the docs,df.apply
接受位置参数和关键字参数。
假设我有这样一个数据框:
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
我不是在寻找解决这个特定示例的变通方法,只是在寻找一般情况下如何做这样的事情。任何建议将不胜感激,谢谢。
我觉得可以
df.apply('-'.join,1)+'-DOG'
Out[157]:
0 foo-x-DOG
1 bar-y-DOG
dtype: object
这就是你想的那样,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
您应该使用矢量化逻辑:
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)
根据 the docs,df.apply
接受位置参数和关键字参数。