Python中的条件随机分配
问题描述:
我需要有条件地随机分配用户到组。管理过程中的表如下:Python中的条件随机分配
A B C
0 9 1 1
1 1 7 8
2 0 2 1
根据上述矩阵,有从区域1总共面积0,16 11个的用户的,和3从区域2
此外,来自区域0,9的11个用户应分配给组A,每个应分配给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组, 索引有10到B组,即11到C组的索引。换句话说,用户3进入组B,用户6进入组C,所有休息去A组
所需的输出是[A,A,B,A,A,C,A,A,A,A,A]
,甚至更好,一个大熊猫数据帧,如:
1 A
2 A
3 B
4 A
5 A
6 C
...
我如何可以自动在我上面的话描述的过程? (实际分配矩阵是10×10)
答
你可以使用np.repeat
要获得正确的用户数的数组:
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)]
,然后如果你愿意,你可以在每个数组上调用pd.Series。
谢谢!这很好解释。 – wwl