您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何加快pandas多级数据帧的总和?

如何加快pandas多级数据帧的总和?

方法1:在我的机器上还不错(已numexpr禁用)

In [41]: from pandas.core import expressions as expr

In [42]: expr.set_use_numexpr(False)

In [43]: %timeit df1+df2+df3+df4
1 loops, best of 3: 349 ms per loop

方法2:使用numexpr(如果numexpr已安装,认情况下启用)

In [44]: expr.set_use_numexpr(True)

In [45]: %timeit df1+df2+df3+df4
10 loops, best of 3: 173 ms per loop

方法3:直接使用 numexpr

In [34]: import numexpr as ne

In [46]: %timeit  DataFrame(ne.evaluate('df1+df2+df3+df4'),columns=df1.columns,index=df1.index,dtype='float32')
10 loops, best of 3: 47.7 ms per loop

这些加速是通过以下方式实现的numexpr

正如我在上面暗示的那样,pandasnumexpr在某些特定类型的操作(例如0.11)下在后台使用,例如df1 + df2将以这种方式进行评估,但是您在此处给出的示例将导致多次调用numexpr方法2比方法1快) )。使用直接方法方法3)ne.evaluate(...)可以实现更大的加速。

请注意,在熊猫0.13(本周将发布0.12)中,我们实现了一个函数pd.eval,该函数实际上将执行上述示例中的操作。敬请期待(如果您喜欢冒险,它将很快成为大师:https ://github.com/pydata/pandas/pull/4037)

In [5]: %timeit pd.eval('df1+df2+df3+df4')
10 loops, best of 3: 50.9 ms per loop

最后回答您的问题,cython将完全没有帮助;numexpr在这类问题上非常有效(也就是说,在 某些 情况下,cython很有帮助)

一个警告:为了使用直接的Numexpr方法,帧应该已经对齐(Numexpr在numpy数组上运行,并且对索引一无所知)。而且它们应该是单个dtype

其他 2022/1/1 18:36:48 有444人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶