任务是随机选择 1000 个客户。在数据集中,行数和唯一 ID 相同。
我随机选择,然后尝试选择具有所选 ID 的数据集:
from numpy.random import choice
ids = choice(df.id, 1000)
df[df.id.isin(ids)]
结果完全不同:df[df.id.isin(ids)]
的大小等于 917。为什么没有 1000 行?
最佳答案
默认为np.random.choice()
是通过替换进行采样,replace=True
。
鉴于样本大小为 1000,生成的样本中很可能会有一些重复。
例如
>>> import pandas as pd
>>> import numpy as np
>>> np.random.seed(444)
>>> s = pd.Series(list(range(1000)))
>>> ids = np.random.choice(s, 1000)
>>> s[s.isin(ids)].count()
623
>>> ids_no_rep = np.random.choice(s, 1000, replace=False)
>>> s[s.isin(ids_no_rep)].count()
1000
如果您想要做的是就地打乱该列的值,您可以为此调用 np.random.shuffle(df["col"].values)
专栏。
关于python - numpy.random.choice 如何与替换一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58414272/