Dmi*_* K. 0 python numpy pandas logical-and
请帮助我理解为什么" 不平等 "的情况不能正常工作.
>>>d = {'a' : [1, 2, 3, 3, 1, 4],
>>> 'b' : [4, 3, 2, 1, 2, 2]}
>>>df = pd.DataFrame(d)
a b
0 1 4
1 2 3
2 3 2
3 3 1
4 1 2
5 4 2
Run Code Online (Sandbox Code Playgroud)
如果我使用相同的条件,我们得到正确的结果logical_and:
>>>df[np.logical_and(df['a']==3, df['b']==2)]
a b
2 3 2
Run Code Online (Sandbox Code Playgroud)
但是如果我们将条件改为不相等则它会停止正常工作:
>>>df[np.logical_and(df['a']!=3, df['b']!=2)]
a b
0 1 4
1 2 3
Run Code Online (Sandbox Code Playgroud)
这类似条件OR而不是AND.
但如果我们~之前使用它,它再次正常工作np.logical_and
>>>df[~np.logical_and(df['a']==3, df['b']==2)]
a b
0 1 4
1 2 3
3 3 1
4 1 2
5 4 2
Run Code Online (Sandbox Code Playgroud)
关于避免失败的逻辑条件我应该知道些什么?
我想你应该了解德摩根的法律:
Run Code Online (Sandbox Code Playgroud)not (A or B) == (not A) and (not B)Run Code Online (Sandbox Code Playgroud)not (A and B) == (not A) or (not B)
这只是命题逻辑,与Python本身无关.
我们可以用真值表来验证它.如果我们制作一个真值表A and B,我们会看到:
|A|a|
-+-+-+
B|T|F|
-+-+-+
b|F|F|
-+-+-+
Run Code Online (Sandbox Code Playgroud)
这里A表示这A是真的,并a表示它A是假的(相同B).我们表示T真实和F虚假.现在,相反的表是:
|A|a|
-+-+-+
B|F|T|
-+-+-+
b|T|T|
-+-+-+
Run Code Online (Sandbox Code Playgroud)
但是如果我们为我们构造一个真值表(not A) and (not B):
|A|a|
-+-+-+
B|F|F|
-+-+-+
b|F|T|
-+-+-+
Run Code Online (Sandbox Code Playgroud)
所以这两者并不等同.
看起来像这样:如果条件是:
A必须为5,B必须为3.
然后相反的不是 A不能是5而B不能是3.从现在开始A为5且B为2的情况不满足我们的第一个条件,但它也不满足我们的(假)第二个要求.相反的是:
A不能是5或B不能是3(相反)
从两个中的一个不是5或3的那一刻起就足够了.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |