我可能正在做一些非常简单的事情,但是我无法弄清楚那里的窍门。

我有一个数据框,我想用某个随机值替换特定列中超过零的值。我以为这是实现此目标的一种方式:

self.dfile['foo'] = np.where(self.dfile['foo'] >= 0, random.uniform(4, 9), self.dfile['foo'])


在所有超过0的值中似乎都给出了相同的随机值。如何获得不同的值?

最佳答案

使用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

关于python - 每行有条件替换 Pandas ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54019278/

10-12 21:02