Переход в распределении с использованием np.random - PullRequest
0 голосов
/ 16 ноября 2018

Я написал следующий код, который случайным образом выбирает число от 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

Может кто-нибудь объяснить это для меня?Заранее спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

Ваш код работает, ваш размер выборки слишком мал.Если вы увеличиваете количество случайных значений или выполняете их многократно, вы должны увидеть, что оно работает нормально.

Совет: у вас в два раза больше условий, чем вам нужно, потому что 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
]

Это делает то же самое, что и ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...