熊猫:np.where在数据帧上有多个条件

时间:2014-12-31 06:26:50

标签: python pandas multiple-conditions

嗨,伙计们,我已经看到了所有的SO和谷歌,无法找到类似的东西......

我有一个数据帧x(基本上由一行和300列组成)和另一个具有相同大小但数据不同的数据帧y。我想修改x使得如果它与y具有不同的符号则为0,并且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

但这似乎也不起作用。我已经在这几个小时了,我完全失去了。请帮忙!

2 个答案:

答案 0 :(得分:12)

y元素等于零时,我不清楚你完全想做什么...无论如何,这个答案的关键点是“使用{{1函数“。

认为以下内容虽然与您的示例不同,但却做了您想要的,但如果我错了,您应该能够结合不同的测试来实现您想要的目标,

np.logical_{and,not,or,xor}

答案 1 :(得分:4)

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

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

x = np.where(((x*y) < 0) & (x != 0)))