我有一个数据框:
A B C
1/2/2007 np.Nan 6.3 np.Nan
1/3/2007 np.Nan np.Nan 3.2
1/4/2007 np.Nan np.Nan np.Nan
1/5/2007 -999 np.Nan 7.3
1/6/2007 np.Nan -999 np.Nan
1/7/2007 np.Nan np.Nan 3.1
1/8/2007 np.Nan -999 np.Nan
如何获得数值为-999的列数?
不是数据帧中的出现次数或每列的出现次数,而是具有该值的列数?
此处的正确答案是
2
,因为列A和B至少出现一次-999
,而列C出现了0
次。 最佳答案
您可以先将整个df与-999进行比较,然后计算无零列的数量。
df.eq(-999).any().sum()
Out[302]: 2
有点解释:
df.eq(-999)给出True / False矩阵,指示元素是否等于-999:
Out[308]:
A B C
1/2/2007 False False False
1/3/2007 False False False
1/4/2007 False False False
1/5/2007 True False False
1/6/2007 False True False
1/7/2007 False False False
1/8/2007 False True False
.any()检查列中是否有任何元素为True,则返回:
Out[309]:
A True
B True
C False
dtype: bool
在此示例中,列A和B为真,因为它们至少具有一个真。
最后,.sum()计算True的数量(在求和运算中,True自动转换为1,False自动转换为0)