【问题标题】:Count the number of values that satisfy a condition in every column of a Pandas dataframe计算 Pandas 数据框每一列中满足条件的值的数量
【发布时间】:2019-11-06 04:33:42
【问题描述】:

我有一个包含几列数据的数据框。在数据中,-1 相当于缺失数据。我想计算每列中 -1 值的数量。

我相信我可以在加载数据时将 -1 注册为 NaN/缺失值,然后我看到一些使用 isna() 并计算布尔值的东西。但是,我想做的事情(对每一列应用条件)似乎是我应该知道如何做的基本事情,所以我想弄清楚如何做到这一点。

这是一个例子。想象一下,我有以下数据框:

row   A   B  C  D  E
1     3   5  6  9 -1
2    -1   3 -1  2  0
3    -1  -1 -1  1 -1

我想得到的输出是:

A  B  C  D  E
2  1  2  0  2

我尝试了以下方法:

df.apply(lambda x: x == -1).count() # value returned was the count of all the rows
(df == -1).count() # also returned a count of all the rows.

我查看了几个与“countif”相关的问题,但它们似乎都将条件应用于一列以选择行。我在上面尝试的两个项目来自与将函数应用于每列以及计算与每列中的条件匹配的值相关的问题。

cmets 中建议的重复项是为整个数据框寻找单个值,并在每列上寻找不同的标准。我希望将相同的条件应用于每一列并获得每列的结果,如下面的选定答案所示。

如果有任何关于如何进行的想法或想法,我将不胜感激。

【问题讨论】:

标签: python pandas


【解决方案1】:

使用DataFrame.eq + DataFrame.sum:

#You can omit to_frame and T if you don't want a DataFrame.
df.eq(-1).sum().to_frame().T
#(df==-1).sum() #similar

或者如果是str:

df.eq('-1').sum().to_frame().T

如果行是列:

df[df.columns[1:]].eq(-1).sum().to_frame().T

   A  B  C  D  E
0  2  1  2  0  2

【讨论】:

  • pd.DataFrame(df.eq(-1).sum()).T 匹配 OP 所需的输出
  • 或to_frame()
  • 感谢这工作。因为我必须去测试它并确保我理解它,我将为其他新手添加这个:没有 .to_frame() 它返回一个系列并且 .T 进行转置(在我的示例中,我连续显示了这些值默认情况下它返回一列)
猜你喜欢
  • 2019-07-13
  • 2019-03-11
  • 2019-05-10
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多