我尝试随机抽取12个独特的组,每个组都有不同数量的观察值.我想从整个总体(数据框)中随机抽样,每组都有相同的概率被选中.最简单的示例是具有2组的数据框.
groups probability
0 a 0.25
1 a 0.25
2 b 0.5
使用np.random.choice(df [‘groups’],p = df [‘probability’],size = 100)现在,每次迭代都有50%的机会选择组a和50%的机会选择组b
为了得出概率,我使用了公式:
(1. / num_groups) / size_of_groups
或在Python中:
num_groups = len(df['groups'].unique()) # 2
size_of_groups = df.groupby('label').size() # {a: 2, b: 1}
(1. / num_groups) / size_of_groups
哪个返回
groups
a 0.25
b 0.50
直到我超过10个唯一的组,然后开始获得怪异的发行版,这才有效.这是一个小例子:
np.random.seed(1234)
group_size = 12
groups = np.arange(group_size)
probs = np.random.uniform(size=group_size)
probs = probs / probs.sum()
g = np.random.choice(groups, size=10000, p=p