根据其他列添加具有随机数的列

时间:2018-08-24 11:23:33

标签: python pandas numpy

我正在尝试在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 :(得分:1)

由于您的问题是负值,因此建议您剪裁或重新分配。

选项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)

第一个选项可能会导致一些偏差偏移。

第二种选择可能效率不高,但会保留一定的偏差。