我的数据框看起来像这样:
如果struct Marker
{
int self_unum;
int mark_unum;
bool is_marking;
int last_mark_cycle;
};
为999且速度为'是0。
我这样做:
speed
但事实证明每个速度都设置为相同的值:
dir
我不确定我做错了什么?我该如何解决这个问题?
答案 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'])