Ассоциирование значений со строками на основе случайного числа - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть набор данных из 100 записей, и я пытаюсь связать случайное число с каждой записью.На данный момент у меня есть это:

df['RAND'] = [random.uniform(0,1) for k in df.index]

, который, кажется, работает.Затем я хочу связать значение 'L' с каждой записью, основываясь на том, где это случайное число попадает в данный интервал.Например,

for i in range(len(df)):
    if 0.89 <= df['RAND'] <= 1:
        i = 'L0'
    elif 0.1 <= df['RAND'] < 0.89:
        i = 'L1'

и так далее.У меня проблемы с выполнением этой последней части, потому что я не уверен, как связать значение 'L' с каждой конкретной записью.

Любая помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Я предлагаю вам использовать np.random, указав size аргумент, который быстрее, чем цикл *

df['RAND'] = np.random.uniform(0,1, size=df.index.size)

Чтобы назначить L s, вы можете использовать np.select указание условий и значений

conditions = [df.RAND >=0.89, (df.RAND < 0.89) & (df.RAND >= 0.1), df.RAND < 0.1]
choices = ['L0', 'L1', 'L2']

df['L'] = np.select(conditions, choices)

Эти подходы лучше, чем циклический просмотр фрейма данных.Если вы перебираете фрейм данных, вы теряете всю мощь, которую библиотека pandas вносит в таблицу;)


*

%timeit [random.uniform(0,1) for k in range(10000)]
3.41 ms ± 65.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit np.random.uniform(0,1, size=10000)
113 µs ± 2.36 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...