2016-08-04 5 views
0

私は3つの列を持つ非常に大きなファイルを持っています。最初の2つは整数で、3つ目は文字列です。私は私が立ち往生しています以下のランダムサンプリングを実行したいと思いますパンダのランダムなデータペアを使用して選択する

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 

:私はここにいくつかの例の偽のデータである

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

を使用して使用してパンダにそれを読みます。私は、データフレームから存在するいくつかのランダムペアを選びたいと思う。私はランダムな行を選びたくはありません。例えば、 "1 1"は4回起こりますが、データフレームに存在する任意のペアを選ぶ確率は同じです。私が "1 1"を選択した場合、 "1 1"を開始するすべての行を出力したいと思います。

私の例の偽データを使用して、[(0,0)、(1,0)、(1,1)、(0,2)、(2,0)、 (2,1)](これらはすべてデータに存在するすべてのペアです)を使用して、これらのペアを使用してデータフレームから行を選択します。

これを行う1つの方法は、最初の2つの列を並べ替え、並べ替えて、np.uniqueと同等の処理を実行することです。次に、この一意のリストからランダムなペアを選択し、それらを使用して元のデータフレームから選択します。

パンダでこれを効率的に行う方法はありますか?

+0

試しましたか?それはあなたのためにあまりにもゆっくりと演じますか –

+0

@WayneWerner説明した手順を実行する方法がわかりません。どのようにして最初の2つの列のユニークなペアのリストを作成しますか? – eleanora

答えて

2

ここに1つの方法です:

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 

は、ランダムにペアを1つ選択します。

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

を(ここでは重複をドロップする最初のものを除いて同じCOL1 COL2のペアを持っているすべての行を削除し、.sample(n=1)そのうちの1つを選択してください)

col1=2col2=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

関連する問題