[英]Count occurences of True/False in column of dataframe
有沒有辦法計算列中布爾值的出現次數而不必循環遍歷 DataFrame?
做類似的事情
df[df["boolean_column"]==False]["boolean_column"].sum()
將不起作用,因為 False 的值為 0,因此零之和將始終返回 0。
顯然,您可以通過遍歷列並檢查來計算出現次數,但我想知道是否有一種pythonic 方法可以做到這一點。
>> df = pd.DataFrame({'boolean_column': [True, False, True, False, True]})
>> df['boolean_column'].value_counts()
True 3
False 2
Name: boolean_column, dtype: int64
如果你想分別計算False
和True
你可以使用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
要分別計算True
或False
值,不要明確地與True
/ False
進行比較,只需通過~
sum
並取反向布爾值來計算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))
我在這里找不到我真正需要的東西。 我需要 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.