我有一个约10,000,000行的数据帧,需要对其中一列进行操作。列中唯一值的数量大约低两个数量级,所以目前我通过应用memoized函数进行转换。
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加速这一步?或者任何其他没有矢量化的技巧?
答案 0 :(得分:5)
是的,这是一种矢量化方法:
col = df.column # This is based on your code and is assumed to to return
# a column but I think you should use indexing to get a column like df['colname']
cond1 = col > 0
cond2 = ~cond1
col[cond1] = col[cond1] * -1
col[cond2] = col[cond2] * 10