Панды: создайте новый столбец со случайными значениями, основанными на условных значениях.
Я пробовал читать подобные вопросы, прежде чем задавать, но я все еще в тупике.
Любая помощь истощается.
Входные данные:
У меня есть фрейм данных pandas со столбцом с надписью " радон ", который имеет значения в диапазоне: [0.5, 13.65]
Вывод:
Я хотел бы создать новый столбец, в котором все значения радона, которые = 0.5, изменяются на случайное значение между 0.1 и 0.5
Я попробовал это:
df['radon_adj'] = np.where(df['radon']==0.5, random.uniform(0, 0.5), df.radon)
Однако я получаю одно и то же случайное число для всех значений 0.5
Я попробовал и это. Он создает случайные числа, но оператор else не копирует исходные значения
df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0, 0.5) if x == 0.5 else df.radon)
1 ответ:
Одним из способов было бы создать все случайные числа, которые вам могут понадобиться, прежде чем выбрать их с помощью
where:Вы могли бы быть немного умнее и генерировать только столько случайных чисел, сколько вам действительно понадобится, но, вероятно, мне потребовалось бы больше времени, чтобы напечатать это предложение, чем вы сэкономили бы. (Мне требуется 9 мс, чтобы сгенерировать ~ 1M чисел.)>>> df = pd.DataFrame({"radon": [0.5, 0.6, 0.5, 2, 4, 13]}) >>> df["radon_adj"] = df["radon"].where(df["radon"] != 0.5, np.random.uniform(0.1, 0.5, len(df))) >>> df radon radon_adj 0 0.5 0.428039 1 0.6 0.600000 2 0.5 0.385021 3 2.0 2.000000 4 4.0 4.000000 5 13.0 13.000000Ваш
applyподход тоже сработал бы, если бы вы использовалиxвместоdf.radon:>>> df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0.1, 0.5) if x == 0.5 else x) >>> df radon radon_adj 0 0.5 0.242991 1 0.6 0.600000 2 0.5 0.271968 3 2.0 2.000000 4 4.0 4.000000 5 13.0 13.000000
Comments