python - 选择按值加权的行索引

标签 python pandas numpy random python-3.8

权重字典:{1:0.1, 2:0.9}(值为 1 的项目有 10% 的概率被选中,值为 2 的项目有 90% 的概率被选中)

示例值行:[0, 0, 1, 0, 2, 1](仅包含 0 和字典中包含的值)

输出应该是随机选择的索引

对于示例行,该行中每个项目的索引被选中的概率应为 [0, 0, 0.05, 0, 0.9, 0.05] (请注意,由于该行包含两个不同的 1 元素,每个元素被选择的概率应该为 0.05,因为权重计入具有该值被选择的项目)

最佳答案

您可以在此处使用np.select

wt = {1:0.1, 2:0.9}
a = np.array([0, 0, 1, 0, 2, 1])
choicelist = [a==i for i in wt.keys()]
condlist = [v/np.count_nonzero(a==k) for k,v in wt.items()]
np.select(choicelist, condlist)
# array([0.  , 0.  , 0.05, 0.  , 0.9 , 0.05])

关于python - 选择按值加权的行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65629540/

相关文章:

python - 当尝试次数多于对象时,我的随机播放算法会崩溃

python - 使用 Fabric 对 git 存储库的权限被拒绝

python - Pandas 合并 : merge two dataframes on same column but keep different columns

python - 使用 toPandas 时强制将 null 一致转换为 nan

numpy - Numpy 中的 Sigmoid 函数

python - 无法 reshape numpy 数组

python - 处理各种货币字符串 pandas

python - 从 python 和字符串连接运行 shell 命令

python - 将行名称转换为 Pandas 中的列

python - 从非日期的最接近值切片数据框