2016-08-04 73 views
0

我有一個非常大的三列文件。前兩個是整數,第三個是一個字符串。我使用使用隨機數據對選擇熊貓

data = pd.read_csv("edges+stuff.txt", sep=' ', header=None, dtype={0:np.uint32, 1:np.uint32, 2:np.str}) 

閱讀使用大熊貓下面是一些例子假數據:

2 0 Somestuff9 
2 0 Somestuff0 
1 1 Somestuff5 
0 0 Somestuff7 
2 0 Somestuff9 
2 0 Somestuff5 
2 1 Somestuff2 
1 1 Somestuff8 
1 1 Somestuff2 
1 0 Somestuff4 
2 1 Somestuff3 
0 2 Somestuff9 
1 1 Somestuff10 
1 0 Somestuff9 

我想執行下列隨機抽樣,我是卡上。我想從數據框中選擇一些隨機對。我不想隨機選擇一行,例如「11」會出現四次,但我希望有相同的機會選擇數據框中存在的任何對。如果我選擇了「1 1」,那麼我想輸出所有開始「1 1」的行。我想從[(0,0),(1,0),(1,1),(0,2),(2,0))中隨機選擇一些對, (2,1)](這些都是數據中存在的所有對),然後使用這些對從數據框中選擇行。

做到這一點的一種方法是取前兩列,對它們進行排序並執行相當於np.unique。然後從這個唯一的列表中選擇隨機對,然後使用它們從原始數據框中進行選擇。

有沒有辦法在熊貓身上有效地做到這一點?

+0

你嘗試過什麼嗎?它對你來說執行得太慢嗎? –

+0

@WayneWerner我不知道如何執行我描述的步驟。例如,如何製作前兩列唯一對的列表? – eleanora

回答

2

這裏有一種方法:

df.head() 
Out: 
    col1 col2  col3 
0  2  0 Somestuff9 
1  2  0 Somestuff0 
2  1  1 Somestuff5 
3  0  0 Somestuff7 
4  2  0 Somestuff9 

隨機選取一對:

df[['col1', 'col2']].drop_duplicates().sample(n=1) 
Out: 
    col1 col2 
0  2  1 

(這裏掉落重複下降具有相同COL1 COL2對除第一個和.sample(n=1)所有行選擇其中之一)

所有的行都有col1=2,col2=1

df[['col1', 'col2']].drop_duplicates().sample(n=1).merge(df) 
Out: 
    col1 col2  col3 
0  2  1 Somestuff2 
1  2  1 Somestuff3 
+1

您可以將'sample()'方法的參數從1更改爲10('.sample(n = 10)')。它將選擇10個獨特的對(假設至少有10對獨特的課程)。 – ayhan

+0

這真是一個了不起的和令人驚訝的答案!熊貓看起來很神奇。 – eleanora

+0

@eleanora是的,熊貓是偉大的。 :) – ayhan