d = {"a": [1, 2, 3, 4, 5], "b": [2, 4, 6, 8, 10]}
df = pd.DataFrame(d)
df.sample(n=3, weights='b', random_state=1)
的回报:
a b
3 4 8
4 5 10
0 1 2
而我正在寻找包含在正态样本分布中的b的最小值和最大值:
a b
3 1 2
4 3 6
0 5 10
删除权重参数不包括最小值。
您需要提取最小/最大值,然后对DataFrame的其余部分采样n-2(如果min == max,则采样n-1):
n = 3
l = [df['b'].idxmin(), df['b'].idxmax()]
out = pd.concat([df.loc[l], df.drop(l).sample(n=n-len(set(l)))]).sort_index()
输出:
a b
0 1 2
3 4 8
4 5 10