我可能做的很简单,但是我无法弄清楚其中的窍门。
我有一个数据框,我想用某个随机值替换特定列中超过零的值。我以为这是实现此目标的一种方式:
self.dfile['foo'] = np.where(self.dfile['foo'] >= 0, random.uniform(4, 9), self.dfile['foo'])
似乎所有超过0的值都具有相同的随机值。如何获得不同的值?
答案 0 :(得分:2)
random.uniform(4, 9)
返回一个整数,然后np.where
会在所有行中广播。而是使用np.random
,它给出指定长度的数组:
self.dfile['foo'] = np.where(self.dfile['foo'] >= 0,
np.random.uniform(4, 9, len(self.dfile.index)),
self.dfile['foo'])
答案 1 :(得分:2)
使用numpy.random.uniform
并按DataFrame
的长度指定长度:
v = np.random.uniform(4, 9, size=len(self.dfile))
self.dfile['foo'] = np.where(self.dfile['foo'] >= 0, v,self.dfile['foo'])
示例:
np.random.seed(123)
dfile = pd.DataFrame({
'foo':[0,5.1,1,0,20.4,10.7],
})
v = np.random.uniform(4, 9, size=len(dfile))
dfile['foo1'] = np.where(dfile['foo'] >= 0, v, dfile['foo'])
dfile['foo2'] = np.where(dfile['foo'].between(0, 10), v ,dfile['foo'])
print (dfile)
foo foo1 foo2
0 0.0 7.482346 7.482346
1 5.1 5.430697 5.430697
2 1.0 5.134257 5.134257
3 0.0 6.756574 6.756574
4 20.4 7.597345 20.400000
5 10.7 6.115532 10.700000