Python Pandas:np.where在数据帧上具有多个条件

Python Pandas:np.where在数据帧上具有多个条件,python,pandas,multiple-conditions,Python,Pandas,Multiple Conditions,嗨,伙计们,我已经到处找过了,所以在谷歌上找不到类似的东西 我有一个数据框x(基本上由一行和300列组成)和另一个数据框y,它们的大小相同,但数据不同。我想修改x,使其为0,如果它与y有不同的符号,并且x本身不是0,否则保持原样。因此,这需要在多个条件下使用np.where。然而,我看到的多个条件示例都使用标量,当我使用相同的语法时,它似乎不起作用(最终将-一切-设置为零,没有错误)。我很担心隐藏在某处或其他地方的引用赋值问题(y是移位后的x,但据我所知,在这个代码上面没有上游问题),有什么想法

嗨,伙计们,我已经到处找过了,所以在谷歌上找不到类似的东西

我有一个数据框x(基本上由一行和300列组成)和另一个数据框y,它们的大小相同,但数据不同。我想修改x,使其为0,如果它与y有不同的符号,并且x本身不是0,否则保持原样。因此,这需要在多个条件下使用np.where。然而,我看到的多个条件示例都使用标量,当我使用相同的语法时,它似乎不起作用(最终将-一切-设置为零,没有错误)。我很担心隐藏在某处或其他地方的引用赋值问题(y是移位后的x,但据我所知,在这个代码上面没有上游问题),有什么想法吗

我尝试调试的代码是:

tradesmade[i:i+1] = np.where((sign(x) != sign(y)) & (sign(x) != 0), 0, x) 
它只返回一堆零。我也试过了

tradesmade[i:i+1][(sign(x) != sign(y)) * (sign(x) != 0)] = 0

但这似乎也不起作用。我已经为此忙了几个小时,完全不知所措。请帮忙

y
元素等于零时,我不清楚您到底想做什么。。。无论如何,这个答案的关键点是“使用
np.logical{and,not,or,xor}
函数”

我认为,尽管以下公式与您的示例不同,但符合您的要求,但如果我错了,您应该能够结合不同的测试来实现您的要求

x = np.where(np.logical_or(x*y>0, y==0), x, 0)

与@GBOFI的帖子类似,但根据我的理解,您的原始请求更加集中,请尝试:

x = np.where(np.logical_and((x*y) < 0, x != 0))
x=np.where(np.logical_和((x*y)<0,x!=0))

x=np.其中((x*y<0)和(x!=0)))

为什么要使用一行300列的数据帧而不是一系列的数据帧?哈,是的,我早该想到这个问题。实际上,我正在遍历该数据帧的>3000行,但是每个计算都取决于先前行的结果,因此一次只能遍历一行。我知道矢量化的重要性和速度,但优先考虑的是得到答案(我似乎也不成功…)子句
sign(x)!=0是不必要的。你花了很长时间才意识到我答案的绝对伟大,但最终你接受了…认真地说:谢谢你花时间回来,并勾选我的答案…哈哈,我当时不是一个非常活跃的用户,所以。因为我在回应你的评论时又这样做了。我想知道我们能坚持多久
x = np.where(((x*y) < 0) & (x != 0)))