【发布时间】:2018-09-18 23:09:33
【问题描述】:
我有一个约 10,000,000 行的数据框,需要对其中一列进行操作。列中唯一值的数量大约低两个数量级,所以目前我正在通过应用记忆函数进行转换。
new = [foo(x) for x in df.column])
index = np.where(new > df.other, new, df.other)
df.set_index(index)
@memoized
def foo(x):
if x > 0:
bar = -1
else:
bar = 10
x *= bar
return x
数据框的绝对大小意味着计算new 仍然需要比我想要的更长的时间。
有没有办法使用 vecorization 来加快这一步?或者任何其他不是矢量化的技巧?
【问题讨论】:
-
您是否尝试过针对应用调用 (pandas.pydata.org/pandas-docs/stable/generated/…) 对列表理解进行基准测试。你也可以看看pandas.pydata.org/pandas-docs/stable/enhancingperf.html。
-
我做到了。忘记确切的结果,但列表理解要快得多。
-
好的,那么像pandas.pydata.org/pandas-docs/stable/enhancingperf.html中建议的那样求助于cython可能会很有趣
-
谢谢。我去看看。
标签: python pandas numpy vectorization