DataFrameをループすることなく、列内のブール値の発生数をカウントする方法はありますか?
のようなことをしています
df[df["boolean_column"]==False]["boolean_column"].sum()
Falseの値は0であるため機能しません。したがって、ゼロの合計は常に0を返します。
当然、列をループしてチェックすることで出現回数を数えることができますが、Pythonでこれを行う方法があるかどうかを知りたいと思いました。
_>> 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
_
あなたは単に合計することができます:
sum(df["boolean_column"])
これにより、「True」要素の数がわかります。
len(df["boolean_column"]) - sum(df["boolean_column"])
「False」要素の数を生成します。
パンダでは、自然な方法は 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 series/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
値の合計量を取得します。行単位のカウントの場合は、_axis=1
_を設定します。
_df[df==True].count().sum()
_
最後にsum()
を追加すると、DataFrame全体の合計が得られます。
ブール値を持つDataFrameに列がある場合、またはさらに興味深い場合は、それがなくても特定の条件を満たす列の値の数を見つけたい場合は、次のようなことを試すことができます(私が使用した例<=):
(df['col']<=value).value_counts()
括弧は、他の計算にも使用できるTrue/False値の#を持つタプルを作成します。追加の変数を作成しなくても、Falseカウントの[0]とTrueカウントの[1]を追加するタプルにアクセスします。
(df['col']<=value).value_counts()[0] #for falses
(df['col']<=value).value_counts()[1] #for trues