Добавить столбец со случайным числом на основе другого столбца - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь добавить столбец в кадре данных Pandas, который в среднем равен значению исходного столбца, но может отклонять в каждой строке некоторые десятичные точки.Идеально отклоняется от нормального дистрибутива, но я не уверен, как это сделать.

Я пробовал простой код, подобный приведенному ниже:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,99,size=(100000, 1)), columns=["GOD_prob"])

df["GOD_prob"] = df["GOD_prob"] / 100
df["GOD_odd"] = 1 / df["GOD_prob"]

df["market_prob"] = ((df["GOD_prob"] * 100 ) + np.random.randint(-10,10, len(df))) / 100
df["market_price"] = 1 / df["market_prob"] 

Проблема, с которой я столкнулсяИмея, для значений в df ["GOD_prob"] ниже 0.10 я могу получить отрицательные значения для df ["market_prob"], и я не хочу этого, так как эти столбцы обозначают вероятности.

После этого я хотел бы создать еще один столбец, который отличается от df ["GOD_prob"] в среднем на 5%, но я не совсем уверен, как это сделать.

Спасибо за помощь!

1 Ответ

0 голосов
/ 24 августа 2018

Так как ваша проблема с отрицательными значениями, я бы предложил обрезать их или переназначить.

Вариант 1:

s = df['GOD_prob']
df['market_prob'] = np.random.normal(s, 0.05*s).clip(0,1)

Вариант 2:

s = df['GOD_prob']
df['market_prob'] = np.random.normal(s, 0.05*s)
cond = (df['market_prob']<0)|(df['market_prob']>1)
while cond.any():
  s = df.loc[cond, 'GOD_prob']
  df.loc[cond, 'market_prob'] = np.random.normal(s, 0.05*s)
  cond = (df['market_prob']<0)|(df['market_prob']>1)

Первый вариант может привести к некоторому сдвигу отклонения.

Второй вариант может быть неэффективным, но сохранит определенное отклонение.

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