2017-06-16 266 views
1

假設之間尋找共同的聯繫我有一個熊貓數據幀像這樣:的Python:熊貓據幀行

ID     Text 
12    [Apple, Zebra] 
14    [Camel, Apple] 
18    [Obama, Trump] 
20    [Lincoln, Obama, Trump] 
15    [Apple, Banana, Zebra] 

「文本」是一個字符串列表。我正在尋找一種方法來查找基於文本的行之間的鏈接,如ID 12和14有Apple的共同點。

所以我會非常想擁有的是:

ID   Text   Link 
12  [Apple]    [14] 
12  [Apple, Zebra]  [15] 
18  [Obama, Trump]  [20] 

我迄今爲止嘗試:通過每個列表中的每個元素進行迭代,使像這樣一本字典:

{ 'Apple' : [12, 14], 'Obama' : [18, 20], 'Trump' : [18, 20], 'Zebra' : [12, 15], 'Camel' : [14], 'Lincoln' : [20], 'Banana' : [15] } 

然而,因爲數據相當大,這需要很多時間。我正在尋找一種速度優化的方式來做到這一點。任何想法和/或幫助表示讚賞。

回答

0

你可以設置數學。 而不是迭代遍歷每個列表的每個元素,你可以找到集合的聯合。 ``` 剛毛= {1,2,3}

SETB = {3,4,5}

如果剛毛相交SETB:

log it somewhere as a tuple 

否則:

skip it. 

``` 這是O(n^2)。我不確定它與您當前的解決方案相比如何。 介意分享嗎?

+0

我現在的解決方案確實非常簡單,我將元素以ID(「鏈接」)作爲元組推送到字典中,並檢查它們是否已經存在。在這種情況下,我將ID添加到列表中 - 「鏈接」。時間複雜度爲O(n^2)的元素數量。 – Kirtiman

+0

雖然我並不完全瞭解你的解決方案,但你的意思是我應該將每個「文本」列表製作爲一個十字路口並檢查它與其餘的十字路口?但是,這似乎是O(n^2)的行數! – Kirtiman