2017-01-09 81 views
0

很難解釋這一點,但我會堅持下去。Combinatorics - 兩套Excel電子表格

我使用NodeXL看數據集中的關係。基本上,我有一些主題,然後是這些主題的子主題,我需要每個主題的子主題的所有可能組合列表,但每個組合最多隻有兩個變量(由於存在多個主題,因此會有重複的組合想看看哪些組合最常見)。

這是一個例子

輸入:

Topic Subtopic 
G/xxx1 Banana 
G/xxx1 Apple 
G/xxx1 Pear 
G/xxx1 Grape 
G/xxx2 Banana 
G/xxx2 Grape 
G/xxx2 Pear 

輸出

A  B 
Banana Apple 
Banana Pear 
Banana Grape 
Apple Pear 
Apple Grape 
Pear  Grape 

Banana Grape 
Banana Pear 
Grape Pear 

我希望這是有道理的,如果任何人有這樣做的一個很好的方式,我會非常感激。我無法手動做,因爲我有成千上萬的話題。

+0

它看起來像你只是想按列A和列B排序。您可以在Excel中小計並查看組的總數,不需要VBA。 – Cyril

+0

看着輸入與輸出,我不太清楚自己在理解你要做什麼(因此上面的回答給出了我認爲你的意思)與視覺。鑑於A和B似乎並沒有真的與輸入相匹配,輸出中的A應該是xxx1和xxx2?這就是我的第一條評論 – Cyril

+0

Hey Cyril,我認爲下面的Gauthier已經回答了它,試試看。一直在尋找的是每個主題的所有組合,但我不想在這兩個專欄中有這個主題,所以基本上每個主題都有兩個組合:) – ScoutEU

回答

2

我用csv格式做過這個,但你可以調整它。我怎麼會(用熊貓來讀取數據框)做到這一點:

import pandas as pd 

df = pd.read_csv("data.csv") 

combinations = [] 
for index, subset in df.groupby("Topic"): 
    subtopics = list(subset["Subtopic"]) 
    n = len(subtopics) 
    for i in range(n): 
     for j in range(i): 
      combinations.append(2(subtopics[i],subtopics[j])) 

print combinations 
print len(combinations) 

在任何情況下創建的所有配對的最佳方式。我正在研究可能的第二種解決方案。將發佈它儘快;)

編輯:

這裏是我的第二個解決方案(仍在使用熊貓):

進口大熊貓作爲PD

df = pd.read_csv("data.csv") 
indexedDF = df.reset_index().set_index("Topic") 
mergedDF = pd.merge(indexedDF,indexedDF, left_index=True, right_index=True) 
finalDF = mergedDF[mergedDF["index_x"] > mergedDF["index_y"]] 

print finalDF 
+0

嘿Gauthier,會給你的方法一個嘗試,並會回來給你儘快!:))感謝您的快速回復 – ScoutEU

+0

再次感謝您,只需在工作計算機上快速安裝Python,我就可以放棄它!:) – ScoutEU

+0

嘿Gauthier,無法獲得第一個代碼工作,但獲得第二名代碼完美地工作。非常感謝!! :) – ScoutEU