我正在使用graphlab和sframe在ipython笔记本中构建重复订单报告。我有一个csv文件,其中包含大约100k行数据,其中包含user_id
,user_email
,user_phone
。我添加了一个名为unique identifier的新列。对于每一行,我将遍历所有其他行,以查看user_id
,user_email
或user_phone
是否与当前记录匹配。如果唯一标识符不为空并且匹配,我将当前记录中的user_id
分配给每个匹配记录的unique_identifier插槽。
最后,我得到一个包含4列的SFrame,其中unique_identifier
包含所有匹配订单的最旧订单的user_id
。我通过.apply
方法使用lambda函数执行此操作。我的笔记本电脑上整个过程需要几秒钟。但是,在完成该过程之后,SFframe变得极其缓慢且无法管理到SFrame.save似乎永远存在的程度。
似乎我的添加unique_identifier
的过程堵塞了内存或类似的东西。但是,问题与sframe大小无关。如果我将其限制为仅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'])
答案 0 :(得分:0)
不要在整个sframe上使用apply,而是在SArray上使用它,这应该加快一点