web-dev-qa-db-fra.com

Compter les occurrences de True / False dans la colonne de la trame de données

Existe-t-il un moyen de compter le nombre d'occurrences de valeurs booléennes dans une colonne sans avoir à parcourir le DataFrame?

Faire quelque chose comme

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

Ne fonctionnera pas car False a une valeur de 0, donc une somme de zéros retournera toujours 0.

Évidemment, vous pouvez compter les occurrences en faisant une boucle sur la colonne et en vérifiant, mais je voulais savoir s'il y avait une façon Pythonique de le faire.

5
Luca Giorgi

Utilisez 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

Si vous voulez compter False et True séparément, vous pouvez utiliser pd.Series.sum() + ~:

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

Vous pouvez simplement résumer:

sum(df["boolean_column"])

Ceci trouvera le nombre d'éléments "vrais".

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

Donne le nombre d'éléments "faux".

1
FMarazzi

Avec Pandas, la manière naturelle utilise value_counts :

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

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

# True     3
# False    2
# Name: A, dtype: int64

Pour calculer True ou False séparément, ne comparez pas avec True/False explicitement, juste sum et prenez le booléen inverse via ~ pour compter False valeurs:

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

Cela fonctionne car bool est une sous-classe de int, et le comportement est également vrai pour Pandas series/NumPy array).

Alternativement, vous pouvez calculer les nombres en utilisant NumPy:

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

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

Cette alternative fonctionne également pour plusieurs colonnes et/ou lignes.

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

Vous obtiendrez le montant total de True valeurs par colonne. Pour un comptage par ligne, définissez axis=1.

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

L'ajout d'une sum() à la fin vous obtiendra le montant total dans l'ensemble du DataFrame.

0
Jakob

Dans le cas où vous avez une colonne dans un DataFrame avec des valeurs booléennes, ou encore plus intéressant, dans le cas où vous ne l'avez pas mais que vous voulez trouver le nombre de valeurs dans une colonne remplissant une certaine condition, vous pouvez essayer quelque chose comme ça (en tant que exemple j'ai utilisé <=):

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

les parenthèses créent un Tuple avec # de valeurs True/False que vous pouvez également utiliser pour d'autres calculs, en accédant au Tuple en ajoutant [0] pour les faux comptes et [1] pour les vrais nombres même sans créer de variable supplémentaire:

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