2017-11-04 16 views
0

条件付きでランダムにユーザーをグループに割り当てる必要があります。 2.Pythonの条件付きランダム割り当て

また、上記マトリックスによれば

A B C 
0 9 1 1 
1 1 7 8 
2 0 2 1 

エリア1からエリア0、16から11人のユーザの合計があります、そしてエリアから3:プロセスを管理するテーブルは以下の通りであります領域0,9からの11人のユーザはグループAに、1はBとCに割り当てなければならない。このプロセスは他のグループと同様である。

私はPythonでいくつかのコードを持っている:

import random 
import pandas as pd 
df = pd.DataFrame({"A": [9,1,0], "B": [1,7,2], "C": [1,8,1]}) 
random.sample(range(1,df.sum(axis=1)[0] + 1),df.sum(axis=1)[0]) 

最後の行は、整数のランダムなベクトルを作成し、例えば[1, 4, 10, 2, 5, 11, 9, 3, 8, 7, 6]。私は1から9までのインデックスをグループAに割り当てることができます。 インデックスをグループBに10、インデックスを11にグループCに割り当てます。つまり、ユーザー3はグループBに、ユーザー6はグループCに、

1 A 
2 A 
3 B 
4 A 
5 A 
6 C 
... 

どのように私は上記の言葉で説明したプロセスを自動化することができます。残りはグループA

に行く所望の出力は[A,A,B,A,A,C,A,A,A,A,A]、またはより良い、のようなパンダのデータフレームのだろうか?その後、

In [39]: [np.random.permutation(np.repeat(df.columns, row)) for row in df.values] 
Out[39]: 
[array(['C', 'A', 'A', 'A', 'A', 'A', 'B', 'A', 'A', 'A', 'A'], dtype=object), 
array(['A', 'B', 'C', 'C', 'B', 'C', 'B', 'C', 'C', 'B', 'B', 'C', 'C', 
     'C', 'B', 'B'], dtype=object), 
array(['B', 'C', 'B'], dtype=object)] 

と:

In [38]: [np.repeat(df.columns, row) for row in df.values] 
Out[38]: 
[Index(['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'C'], dtype='object'), 
Index(['A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 
     'C', 'C'], 
     dtype='object'), 
Index(['B', 'B', 'C'], dtype='object')] 

し、それらを並べ替える:あなたは、ユーザーの権利数の配列を取得するためにnp.repeatを使用することができ

答えて

1

(実際の割り当て行列は10×10です)必要に応じて、各配列のpd.Seriesを呼び出すことができます。

+0

ありがとうございます!これは非常によく説明されました。 – wwl

関連する問題