Python& Pandas:根据条件将随机值设置为列

时间:2016-07-10 23:46:49

标签: python pandas

我的数据框看起来像这样:

enter image description here

如果struct Marker { int self_unum; int mark_unum; bool is_marking; int last_mark_cycle; }; 为999且速度为'是0。

我这样做:

speed

但事实证明每个速度都设置为相同的值:

dir

我不确定我做错了什么?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

或者,您可以将size函数中的uniform参数指定为等于您尝试修改的行数:

ind = (df['dir'] == 999) & (df['speed'] == 0)
df.loc[ind, 'speed'] = np.random.uniform(0, 1, size = sum(ind))

答案 1 :(得分:1)

你是"广播"对所有行np.random.uniform(0,1),意味着您只需拨打np.random.uniform(0,1)一次。这就是为什么你总能看到相同的数字。

您可以根据您的条件更新数据框:

In [46]: data = [{"dir":310, "speed":5.1}, {"dir":999, "speed":0}]

In [47]: df = pd.DataFrame(data)

In [48]: df
Out[48]: 
   dir  speed
0  310    5.1
1  999    0.0

In [49]: df.speed = df.apply(lambda x: np.random.uniform(0, 1) if x.speed == 0 and x.dir == 999 else x.speed, axis=1)

In [50]: df
Out[50]: 
   dir     speed
0  310  5.100000
1  999  0.948842

答案 2 :(得分:0)

df['speed'] = np.where( (df['dir'] == 999) & (df['speed'] == 0),  np.random.uniform(0,1), df['speed'])