2015-02-11 72 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