【发布时间】:2016-08-05 04:50:39
【问题描述】:
如果我有一个功能
def do_irreversible_thing(a, b):
print a, b
还有一个数据框,比如说
df = pd.DataFrame([(0, 1), (2, 3), (4, 5)], columns=['a', 'b'])
为 pandas 数据框中的每一行只运行一次函数的最佳方法是什么。 As 在其他 questions 中指出,类似 df.apply pandas 的东西会为第一行调用两次该函数。即使使用 numpy
np.vectorize(do_irreversible_thing)(df.a, df.b)
导致函数在第一行被调用两次,df.T.apply() 或 df.apply(..., axis=1) 也是如此。
有没有比这个显式循环更快或更简洁的方法来调用每一行的函数?
for idx, a, b in df.itertuples():
do_irreversible_thing(a, b)
【问题讨论】:
-
这听起来像是
for循环的工作。通常没有很好的方法来矢量化副作用。 -
如果副作用不依赖于每一行的操作,那么它应该是可向量化的
-
如果您需要运行显式循环,使用
zip(df.a, df.b)或df.itertuples()可能会获得更好的性能,详见this answer。
标签: python function numpy pandas