条件付きでランダムにユーザーをグループに割り当てる必要があります。 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
を使用することができ
ありがとうございます!これは非常によく説明されました。 – wwl