我正在使用graphlab和sframe在ipython笔记本中构建重复订单报告。我有一个csv文件,其中大约有10万行数据,其中包含user_id
,user_email
,user_phone
。我添加了一个称为唯一标识符的新列。对于每一行,我将遍历所有其他行以查看user_id
,user_email
或user_phone
是否与当前记录匹配。如果唯一标识符不为空并且存在匹配项,则将当前记录中的user_id
分配给每个匹配记录的unique_identifier插槽。
最后,我得到一个包含4列的SFrame,其中unique_identifier
包含所有匹配订单中最早的订单的user_id
。我通过带有lambda函数的.apply
方法执行此操作。整个过程在我的笔记本电脑上花费了几秒钟。但是,在完成该过程之后,SFframe变得极其缓慢且难以管理,以至于SFrame.save似乎永远无法使用。
看来我添加unique_identifier
的过程堵塞了内存或类似的东西。但是,问题与框架大小无关。如果我将其限制为仅10行,则问题仍然存在。我究竟做错了什么?
这是我的方法
def set_unique_identifier():
orders['unique_identifier'] = ''
orders['unique_identifier'] = orders.apply(lambda order:
order['unique_identifier'] if order['unique_identifier'] else
orders[(orders['user_email']==order['user_email']) |
(orders['phone'] == order['user_phone'])][0]['user_id'])
最佳答案
不要在整个sframe上使用apply,而是在SArray上使用它,这会加快速度
关于python - 添加新列后,SFrame操作变慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41097396/