Python Pandas计算发生特定值的DataFrame列的数量

时间:2018-02-20 23:23:27

标签: python pandas

我有一个数据框:

              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

1 个答案:

答案 0 :(得分:3)

您可以先将整个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列为真,因为它们至少有一个Trues。

最后,.sum()计算特鲁斯的数量,(在自然操作中,True会自动转换为1,False为0)