其他论坛也提到过这个问题,但重点是关注。
我有一个简单的数据框:
y=[[1,2,3,4,1],[1,2,0,4,5]]
df = pd.DataFrame(y)
我很难理解任何和所有的工作。根据熊猫文件'任何'返回" ...是否有任何元素在请求的轴上为True"。
如果我使用:
~(df == 0)
Out[77]:
0 1 2 3 4
0 True True True True True
1 True True False True True
~(df == 0).any(1)
Out[78]:
0 True
1 False
dtype: bool
根据我的理解,第二个命令意味着:返回' True'如果任何元素在请求的轴上为True,并且它应该为两行返回True,True(因为两者都包含至少一个真值)但是我得到True,False。那是为什么?
答案 0 :(得分:3)
您需要一个let testNumbers = [1,1,2,3,4,5,2]
let nondupicate = testNumbers.reduce(into: [Int]()) {
if !$0.contains($1) {
$0.append($1)
} else {
print("Found dupicate: \($1)")
}
}
因为运营商的优先级:
()
由于:
print (df == 0)
0 1 2 3 4
0 False False False False False
1 False False True False False
print (~(df == 0))
0 1 2 3 4
0 True True True True True
1 True True False True True
print ((~(df == 0)).any(1))
0 True
1 True
dtype: bool
答案 1 :(得分:2)
Python将您的调用解释为:
~ ( (df == 0).any(1) )
所以它首先评估any
。现在,如果我们看一下df == 0
,我们会看到:
>>> df == 0
0 1 2 3 4
0 False False False False False
1 False False True False False
所以这意味着在第一行中没有这样的True
,在第二行中,所以:
>>> (df == 0).any(1)
0 False
1 True
dtype: bool
现在我们用~
否定这一点,因此False
变为True
,反之亦然:
>>> ~ (df == 0).any(1)
0 True
1 False
dtype: bool
如果我们首先否定,我们会看到:
>>> (~ (df == 0)).any(1)
0 True
1 True
dtype: bool
两者都是True
,因为在这两行中至少有一列是True
。