计算数据框列中真/假的出现次数

Luc*_*rgi 14 python counter boolean series pandas

有没有办法计算列中布尔值的出现次数而不必循环遍历 DataFrame?

做类似的事情

df[df["boolean_column"]==False]["boolean_column"].sum()
Run Code Online (Sandbox Code Playgroud)

将不起作用,因为 False 的值为 0,因此零之和将始终返回 0。

显然,您可以通过遍历列并检查来计算出现次数,但我想知道是否有一种pythonic 方法可以做到这一点。

use*_*881 27

使用pd.Series.value_counts()

>> df = pd.DataFrame({'boolean_column': [True, False, True, False, True]})
>> df['boolean_column'].value_counts()
True     3
False    2
Name: boolean_column, dtype: int64
Run Code Online (Sandbox Code Playgroud)

如果你想单独计数FalseTrue你可以使用pd.Series.sum()+ ~

>> df['boolean_column'].values.sum()  # True
3
>> (~df['boolean_column']).values.sum() # False
2
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

对于 Pandas,自然的方式是使用value_counts

df = pd.DataFrame({'A': [True, False, True, False, True]})

print(df['A'].value_counts())

# True     3
# False    2
# Name: A, dtype: int64
Run Code Online (Sandbox Code Playgroud)

要单独计算TrueFalse值,不要与True/False显式比较,只需sum使用反向布尔值~来计算False值:

print(df['A'].sum())     # 3
print((~df['A']).sum())  # 2
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为它bool是 的子类int,并且该行为也适用于 Pandas 系列/NumPy 数组。

或者,您可以使用 NumPy 计算计数:

print(np.unique(df['A'], return_counts=True))

# (array([False,  True], dtype=bool), array([2, 3], dtype=int64))
Run Code Online (Sandbox Code Playgroud)