我正在尝试在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%的列,但是我不确定如何执行此操作。
感谢您的帮助!
答案 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)
第一个选项可能会导致一些偏差偏移。
第二种选择可能效率不高,但会保留一定的偏差。