Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 统计dataframe列中出现的True/False_Python_Pandas_Boolean_Counter_Series - Fatal编程技术网

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]