2015-02-11 70 views
0

我有一个叫做buy_groups的字典,它存储了一组SessionID,然后我想看到数据框的元素SesssionData在字典中出现了一个SessionID。如果它存在,则我设置购买为1的数据帧这样如何在这种情况下加快熊猫(查询字典)?

SessionID Buy  
1   0 
2   0 
3   0 

例如,如果存在于字典buy_groups 3,然后我设置相关买入= 1。

我写了一个量化的版本是这样

SessionData.Buy[SessionData.SessionID.apply(lambda x: buy_groups.has_key(x))== True] = 1  

大约需要5秒。

相反,迭代需要甚至更短的时间,如2秒,

for items in keys_value: 
    if buy_groups.has_key(items)== True: 
     SessionData.loc[SessionData['SessionID']==items,'Buy'] = 1 

我如何可以加快这一操作,因为两个数据帧和字典是非常大的。

在此先感谢!

+0

对不起,我仍然对你想要的东西感到困惑。你所要做的就是将所有SessionID中的'Buy'设置为1,这些都是buy_groups中的键?或者对于(1)buy_groups中的键和(2)keys_value(不管那是什么)中的所有SessionID? – DSM 2015-02-11 03:55:07

+0

对不起,我想把'买'设置为1,所有SessionIDs都是buy_groups中的键。 – 2015-02-11 15:55:46

回答

1

编辑:根据Andy Hayden的建议,我将buy_groups.keys()更改为buy_groups以避免不必要的列表转换。

这是我会尝试的。它使用布尔指数方法

rowindex = SessionData['SessionID'].isin(buy_groups)  
SessionData[rowindex,'Buy'] = 1 
+0

您可以删除.keys(),在Python 2中,这会不必要地创建列表(然后必须转换为集合)。 – 2015-02-11 04:34:25

+0

啊,好的。我不知道。我会更新我的回答 – 2015-02-11 12:48:43

+0

非常感谢,鲍勃和安迪。我会试试看。 – 2015-02-11 16:56:40