添加基于其他列的随机数列



>我正在尝试在熊猫数据帧中添加一列,该列平均等于初始列的值,但每行可能会偏离一些小数点。理想情况下偏离正态分布,但我不确定如何做到这一点。

我尝试了如下所示的简单代码:

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:

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)

第一种选择可能会导致一些偏差偏移。

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

最新更新