簡體   English   中英

計算數據框列中真/假的出現次數

[英]Count occurences of True/False in column of dataframe

有沒有辦法計算列中布爾值的出現次數而不必循環遍歷 DataFrame?

做類似的事情

df[df["boolean_column"]==False]["boolean_column"].sum()

將不起作用,因為 False 的值為 0,因此零之和將始終返回 0。

顯然,您可以通過遍歷列並檢查來計算出現次數,但我想知道是否有一種pythonic 方法可以做到這一點。

使用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

如果你想分別計算FalseTrue你可以使用pd.Series.sum() + ~

>> df['boolean_column'].values.sum()  # True
3
>> (~df['boolean_column']).values.sum() # False
2

對於 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

要分別計算TrueFalse值,不要明確地與True / False進行比較,只需通過~ sum並取反向布爾值來計算False值:

print(df['A'].sum())     # 3
print((~df['A']).sum())  # 2

這是有效的,因為boolint的子類,並且該行為也適用於 Pandas 系列 / NumPy 數組。

或者,您可以使用 NumPy 計算計數:

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

# (array([False,  True], dtype=bool), array([2, 3], dtype=int64))

我在這里找不到我真正需要的東西。 我需要 True 和 False 出現的次數以進行進一步計算,因此我使用了:

true_count = (df['column']).value_counts()[True]
False_count = (df['column']).value_counts()[False]

其中 df 是您的 DataFrame,而 column 是帶有布爾值的列。

你可以簡單地總結:

sum(df["boolean_column"])

這將找到“真”元素的數量。

len(df["boolean_column"]) - sum(df["boolean_column"])

將產生“False”元素的數量。

此替代方法也適用於多列和/或多行。

df[df==True].count(axis=0)

將為您提供每列的True值總數。 對於按行計數,設置axis=1

df[df==True].count().sum()

最后添加sum()將獲得整個 DataFrame 中的總金額。

df.isnull() 

返回一個布爾值。 True表示缺失值。

df.isnull().sum() 

返回True值的列明智總和。

df.isnull().sum().sum() 

返回 NA 元素的總數。

如果你在 DataFrame 中有一個帶有布爾值的列,或者更有趣的是,如果你沒有它但你想找到滿足特定條件的列中的值的數量,你可以嘗試這樣的事情(作為我使用的示例 <=):

(df['col']<=value).value_counts()

括號創建一個包含 # of True/False 值的元組,您也可以將其用於其他計算,訪問元組添加 [0] 表示 False 計數和 [1] 表示 True 計數,即使不創建附加變量:

(df['col']<=value).value_counts()[0] #for falses
(df['col']<=value).value_counts()[1] #for trues

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM