Python 统计dataframe列中出现的True/False
有没有一种方法可以计算列中布尔值的出现次数,而不必在数据帧中循环 像这样做Python 统计dataframe列中出现的True/False,python,pandas,boolean,counter,series,Python,Pandas,Boolean,Counter,Series,有没有一种方法可以计算列中布尔值的出现次数,而不必在数据帧中循环 像这样做 df[df["boolean_column"]==False]["boolean_column"].sum() 将不起作用,因为False的值为0,因此零和将始终返回0 显然,您可以通过在列上循环并检查来计算出现次数,但我想知道是否有一种类似于python的方法来完成此操作。您可以简单地求和: sum(df["boolean_column"]) 这将找到“真”元素的数量 len(df["boolean_column"
df[df["boolean_column"]==False]["boolean_column"].sum()
将不起作用,因为False的值为0,因此零和将始终返回0
显然,您可以通过在列上循环并检查来计算出现次数,但我想知道是否有一种类似于python的方法来完成此操作。您可以简单地求和:
sum(df["boolean_column"])
这将找到“真”元素的数量
len(df["boolean_column"]) - sum(df["boolean_column"])
将产生“假”元素的数量。使用:
len(df["boolean_column"]) - sum(df["boolean_column"])
如果要分别计算False
和True
,可以使用pd.Series.sum()
+~
:
>> df['boolean_column'].values.sum() # True
3
>> (~df['boolean_column']).values.sum() # False
2
对于熊猫,自然的方式是使用: 要分别计算
True
或False
值,不要显式地与True
/False
进行比较,只需对求和
并通过~
取反向布尔值即可计算False
值:
print(df['A'].sum()) # 3
print((~df['A']).sum()) # 2
这是因为bool
是int
的一个子类,这种行为也适用于Pandas系列/NumPy数组
或者,您可以使用NumPy计算计数:
print(np.unique(df['A'], return_counts=True))
# (array([False, True], dtype=bool), array([2, 3], dtype=int64))
此备选方案也适用于多列和/或多行
df[df==True].count(axis=0)
将获得每列的True
值的总数。对于行计数,设置轴=1
df[df==True].count().sum()
最后添加一个
sum()
将得到整个数据帧中的总量。如果数据帧中有一列具有布尔值,或者更有趣的是,如果没有,但希望找到满足特定条件的列中的值数,可以尝试类似的方法(我举了一个例子
返回布尔值。True
表示缺少值
df.isnull().sum()
返回True
值的列式和
df.isnull().sum().sum()
返回NA元素的总数。我在这里找不到确切需要的元素。我需要True和False的出现次数以进行进一步计算,因此我使用了:
len(df["boolean_column"]) - sum(df["boolean_column"])
true_count = (df['column']).value_counts()[True]
False_count = (df['column']).value_counts()[False]
其中df是您的数据帧,column是带布尔值的列。注意,将内置对象与Pandas/NumPy对象一起使用不是一种好的做法。为了实现矢量化,请使用
pd.Series.sum
或np.ndarray.sum
。我不久前曾使用过这种方法,但这不是一种好方法。首先,值计数为您提供了最丰富的va首先是lue/bin,然后按降序排序。因此,如果您不知道最可能的值是什么,则第一个值可能不是“False”。其次,如果只有一个值,则为df。[无论什么]。值_计数()[1]将引发一个错误,因为没有这样的元素。从这个意义上说,使用.sum或.value.sum的方法更安全。但是OP不想计算缺少的单元格,但其中包含布尔值的单元格…这不是很容易从接受的答案推断出来的吗?
df.isnull().sum()
df.isnull().sum().sum()
true_count = (df['column']).value_counts()[True]
False_count = (df['column']).value_counts()[False]