Python 熊猫-比较正值/负值

Python 熊猫-比较正值/负值,python,pandas,Python,Pandas,我有一个数据帧“df”: 我试图确定x和y值的正或负的一致百分比。所以,如果x是正的,y是正的,那将是一个正确的答案。如果x和y都是负数,那就对了。如果x和y不同,那么它是错误的。有没有快速的方法可以做到这一点?最后,我只想知道所有行中有多少行有正确答案 (注意,实际数据帧中有超过1M行) 感谢您如果我们比较x*y>=0的产品-这将给我们提供“好的”行: In [19]: df['x'].mul(df['y']).ge(0) Out[19]: 0 False 1 True 2

我有一个数据帧“df”:

我试图确定x和y值的正或负的一致百分比。所以,如果x是正的,y是正的,那将是一个正确的答案。如果x和y都是负数,那就对了。如果x和y不同,那么它是错误的。有没有快速的方法可以做到这一点?最后,我只想知道所有行中有多少行有正确答案

(注意,实际数据帧中有超过1M行)


感谢您

如果我们比较
x*y>=0的产品
-这将给我们提供
“好的”
行:

In [19]: df['x'].mul(df['y']).ge(0)
Out[19]:
0    False
1     True
2     True
3     True
4     True
dtype: bool


In [20]: df.loc[df['x'].mul(df['y']).ge(0)]
Out[20]:
   x  y
1 -2 -3
2  3  4
3  4  5
4  9  6

In [21]: len(df.loc[df['x'].mul(df['y']).ge(0)])/len(df)
Out[21]: 0.8
或者按照更快更“泛达”版本的建议:

同样的想法,但这次使用的方法是:


(df.x.mul(df.y.ge(0)).mean()
可能更快。@NickilMaveli,哇,太聪明了-我会把它添加到答案中!非常感谢。我不知道这是否是预期的行为,但是
x*y>=0
将对任何包含零的行进行重击,即(0,0)、(0,1)和(0,-1)行都将被声明为具有相同的符号。@root,这是一个很好的观点,但我不知道OP如何处理这些情况。如果他们认为这是不对的,他们可以很容易地将
=
更改为
.ge(0)
更改为
.gt(0)
。除非惯例是零既是正的也是负的,或者零与符号中的任何东西都不匹配,包括它本身,对于包含零的行,
=
都将产生不正确的结果。使用
时,零将不匹配符号中的任何内容,包括其本身,即(0,0)将计算为False。使用
=
zero将匹配所有内容,如我前面的示例所示。我认为通常的约定是将零作为它自己的符号,因此它只匹配自身:
np.sign([0,-10,20])=[0,-1,1]
。我们应该如何在一个或两个值都为
0
的行中创建树?在我使用的数据中不会出现这种情况,但谢谢。
In [19]: df['x'].mul(df['y']).ge(0)
Out[19]:
0    False
1     True
2     True
3     True
4     True
dtype: bool


In [20]: df.loc[df['x'].mul(df['y']).ge(0)]
Out[20]:
   x  y
1 -2 -3
2  3  4
3  4  5
4  9  6

In [21]: len(df.loc[df['x'].mul(df['y']).ge(0)])/len(df)
Out[21]: 0.8
In [23]: df['x'].mul(df['y']).ge(0).mean()
Out[23]: 0.80000000000000004
In [27]: df.eval('x * y >= 0').mean()
Out[27]: 0.80000000000000004