Pandas取包含min和max的列值的正态分布样本


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

最新更新