pandas - 使用 np.random 跳转分布
问题描述
我编写了以下代码,它从均匀分布中随机选择一个介于 0 和 1 之间的数字,并根据特定条件将其与“LF”值相关联。
df['RAND'] = np.random.uniform(0, 1, size=df.index.size)
conditions = [
df['RAND'] >= (1 - 0.8062),
(df['RAND'] < (1 - 0.8062)) & (df['RAND'] >= 0.1),
(df['RAND'] < 0.1) & (df['RAND'] >= 0.05),
(df['RAND'] < 0.05) & (df['RAND'] >= 0.025),
(df['RAND'] < 0.025) & (df['RAND'] >= 0.0125),
(df['RAND'] < 0.0125)
]
choices = ['LF0', 'LF1', 'LF2', 'LF3', 'LF4', 'LF5']
df['LF'] = np.select(conditions, choices)
# print(df['LF'])
print(df.pivot_table(index=df['LF'], aggfunc=len, fill_value=0))
我遇到的问题是,当我生成数据透视表时,我注意到分布中有“跳跃” - 也就是说,跳过了“LF”值。我在下面的输出图片中包含了一个链接,其中跳过了“LF4”值:
有人可以为我解释一下吗?提前致谢。
解决方案
您的代码有效,您的样本量太小了。如果您增加随机值的数量,或重复运行,您应该会看到它工作正常。
提示:您需要的条件是您需要的两倍,因为np.select()
需要第一个匹配项。所以:
conditions = [
df['RAND'] >= (1 - 0.8062),
df['RAND'] >= 0.1,
df['RAND'] >= 0.05,
df['RAND'] >= 0.025,
df['RAND'] >= 0.0125,
df['RAND'] < 0.0125, # same as np.isfinite(), or True if no NANs
]
这与您的代码完全相同。
推荐阅读
- json - 在 CodeIgniter 中使用 JSON 查询时出现 500 错误,具体取决于查询顺序
- excel - Excel VBA 通过连续单击单元格/文本按多个条件排序
- swift - 以枚举作为标识符的 Swift 字典不会在完成块中自动完成
- python - 多个 seaborn 联合分布图
- python - 在 Python 中生成排列的子集,但不是所有排列
- laravel - Laravel - 访问 .env 变量
- java - 拆分函数不返回最后一个字段
- jquery - 使用 Bootstrap 4 Cards 的网格/列表切换视图
- c# - NetworkInfo.Type 已过时:“已弃用”
- sql - 如何根据合并的列将列与以下联接合并?