2017-11-04 4 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에 할당되어야합니다. 프로세스는 나머지 그룹과 유사합니다.

는 파이썬에 몇 가지 코드를 가지고 :

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 인 인덱스, 그룹 C에 대해 11 인 인덱스입니다. 즉, 사용자 3은 그룹 B로 이동하고 사용자 6은 그룹 C로 이동합니다. 원하는 출력 [A,A,B,A,A,C,A,A,A,A,A], 또는 더 나은, 같은 팬더 dataframe 될 것이라고 그룹 A.

로 이동 하셔도 :

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

어떻게 내가 위의 단어에 설명 된 프로세스를 자동화 할 수 있습니다? 를 뒤 바꿔 다음

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')] 

: 그리고 다음

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)] 

답변

1

당신은 올바른 사용자 수의 배열을 얻을 수 np.repeat을 사용할 수 있습니다 (실제 할당 행렬은 10 × 10) 원하는 경우 각 배열에서 pd.Series를 호출 할 수 있습니다.

+0

고마워요! 이것은 아주 잘 설명되었습니다. – wwl