使用np.random

时间:2018-11-16 14:04:37

标签: pandas numpy

我编写了以下代码,该代码从均匀分布中随机选择一个介于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”值:

LF Pivot Table

有人可以帮我解释一下吗?预先感谢。

1 个答案:

答案 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
]

这与您的代码完全相同。