我有一个与aprox有关的数据帧。4列200行。我用空值创建了第5列:
df['minutes'] = np.nan
然后,我想用随机逆对数正态值填充这个新列的每一行。生成1逆对数正态的代码:
注意:如果下面的代码运行了多次,它将生成一个新的结果,因为ppf()
:random.random()
当我这样做的时候,它用相同的数字填充了df['minutes']
的所有200行,而不是像我预期的那样为每一行触发random.random()
。在
我该怎么办?我尝试使用for loop
,但显然我没有正确地使用它(给出相同的结果):
for i in range(1,len(df)):
df['minutes'] = df['minutes'].fillna(stats.lognorm(0.5, scale=np.exp(1.8)).ppf(random.random()).astype(int))
我做错什么了?在
另外,如果另一列的值是0或1,我将需要更改上面inverse log normal
的一些参数。如:
if df['type'] == 0:
df['minutes'] = df['minutes'].fillna(stats.lognorm(0.5, scale=np.exp(1.8)).ppf(random.random()).astype(int))
elif df['type'] == 1:
df['minutes'] = df['minutes'].fillna(stats.lognorm(1.2, scale=np.exp(2.7)).ppf(random.random()).astype(int))
提前谢谢。在
这里使用
fillna
的问题是,该函数以一个值作为参数,并将其应用于沿指定轴的每个元素。因此,只计算一次stat值,然后将其分配到每一行。在您需要的是为轴上的每个元素调用函数,因此参数必须是函数本身,而不是值。这是
apply
的一项工作,它接受一个函数并将其应用于沿轴的元素。在我直接跳到你的最终要求:
您可以在
minutes
-列上使用apply
(作为熊猫系列方法),然后将相应结果分配给type
列的minutes
列过滤行:。。。或者使用
^{pr2}$apply
作为一个数据帧方法,该方法使用一个包装逻辑的函数来区分type
-column的值,并将结果分配回minutes
-列:用不同的思维方式完成了一些步骤:
已使用
NumPy's append
所以每一行都有不同的随机数然后,将它们与先前创建的另一个列表一起包含在数据帧中:
相关问题 更多 >
编程相关推荐