将函数应用于数据框每一行

8

如何更优雅地实现以下功能?

我想将函数my_function应用于一个数据框,其中数据框的每一行都包含函数的参数。然后,我希望将函数的输出写回到数据框的相应行。

results = pd.DataFrame()
for row in input_panel.iterrows():
    (index, row_contents) = row
    row_contents['target']  = my_function(*list(row_contents))
    results = pd.concat([results, row_contents])

1
你能分享一下 my_function 做了什么吗?也许有一种方法可以消除迭代的需要。 - user3483203
1
在某个地方,Pandas的石碑上写着:“永远不要在for循环内调用DataFrame.append或pd.concat。这会导致二次复制。”(https://dev59.com/7FoV5IYBdhLWcg3wPs0Y#36489724) - Parfait
1个回答

9
我们将遍历这些值,并在最后构建一个DataFrame。
results = pd.DataFrame([my_function(*x) for x in input_panel.values.tolist()])

较不推荐的方法是使用DataFrame.apply
results = input_panel.apply(lambda x: my_function(*x))
< p > apply 的唯一优点是减少打字量。


为什么不建议使用apply函数?或者说,使用apply函数解决问题时出现了错误:TypeError: ('my_function() takes exactly 7 arguments (13 given)', u'occurred at index deviation') - Lisa
@Lisa 比循环慢...有时人们喜欢少打字,只要完成工作就行,不在乎速度。至于错误,你必须自己解决,因为你传递了比你想要的更多的参数,而你的问题没有暗示这一点。没有你的数据,我无法提供更多建议。 - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接