我有一个基于5分李克特量表的数据集。我想将每个单元格转换为具有预定均值和标准差的正态分布值。我现在的代码如下。
import random
Mu={1:0.021,2:0.146,3:0.375,4:0.625,5:0.979}
std={1:0.021,2:0.104,3:0.125,4:0.125,5:0.021}
#defining the random dictionary
rnd={1:random.normalvariate(Mu[1], std[1]),
2:random.normalvariate(Mu[2], std[2]),
3:random.normalvariate(Mu[3], std[3]),
4:random.normalvariate(Mu[4], std[4]),
5:random.normalvariate(Mu[5], std[5])}
raw_data_rnd=raw_data.copy()
for col in raw_data_rnd.columns:
raw_data_rnd[col].mask(raw_data_rnd[col]==1,random.normalvariate(Mu[1],std[1]),inplace=True)
raw_data_rnd[col].mask(raw_data_rnd[col]==2,random.normalvariate(Mu[2],std[2]),inplace=True)
raw_data_rnd[col].mask(raw_data_rnd[col]==3,random.normalvariate(Mu[3],std[3]),inplace=True)
raw_data_rnd[col].mask(raw_data_rnd[col]==4,random.normalvariate(Mu[4],std[4]),inplace=True)
raw_data_rnd[col].mask(raw_data_rnd[col]==5,random.normalvariate(Mu[5],std[5]),inplace=True)
raw_data_rnd
密码起作用了。但是,它为条件为真的每个单元格提供相同的值。我需要的是代码以某种方式循环随机值的分配,并在每个单元格中放入不同的值。换句话说,例如每次 Dataframe 的值为1时,我需要代码分配一个新的随机值。
有人能帮忙吗?
我试过几种方法。然而,我仍然在走死胡同。
1条答案
按热度按时间kr98yfug1#
IIUC,你可以使用
np.unique
来获取每个值的计数(1到5之间),然后使用np.where
根据mu
和std
参数用np.random.normal
替换随机数:输出:
输入数据: