我编写了以下代码,该代码从均匀分布中随机选择一个介于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”值:
有人可以帮我解释一下吗?预先感谢。
答案 0 :(得分:1)
您的代码有效,您的样本量太小。如果您增加随机值的数量或重复运行,应该会看到它工作正常。
提示:您需要的条件数量是所需条件的两倍,因为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
]
这与您的代码完全相同。