我有一个数据框:

              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)

07-24 09:38
查看更多