将具有多个参数的函数传递给 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

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

原文由 Michael Henry 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

It’s just the way you think it would be, apply accepts args and kwargs and passes them directly to 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

原文由 cs95 发布,翻译遵循 CC BY-SA 3.0 许可协议

您应该使用矢量化逻辑:

 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 接受位置参数和关键字参数。

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题