Подсчет вхождений True / False в столбце данных - PullRequest
0 голосов
/ 21 ноября 2018

Есть ли способ подсчитать количество вхождений логических значений в столбце без циклического перебора DataFrame?

Выполнение чего-то вроде

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

Не будет работать, потому что Falseимеет значение 0, следовательно, сумма нулей всегда будет возвращать 0.

Очевидно, что вы могли бы подсчитать вхождения, пройдя по столбцу и проверив, но я хотел знать, есть ли питонный способ сделать это.

Ответы [ 4 ]

0 голосов
/ 11 июня 2019

Этот вариант работает также для нескольких столбцов и / или строк.

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

Получит вам общее количество True значений для столбца.Для подсчета по ряду установите axis=1.

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

При добавлении sum() в конце вы получите общую сумму во всем DataFrame.

0 голосов
/ 21 ноября 2018

Используйте 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

Если вы хотите считать False и True отдельно, вы можете использовать pd.Series.sum() + ~:

>> df['boolean_column'].values.sum()  # True
3
>> (~df['boolean_column']).values.sum() # False
2
0 голосов
/ 21 ноября 2018

Для Панд естественным способом является использование 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))
0 голосов
/ 21 ноября 2018

Вы можете просто сложить:

sum(df["boolean_column"])

Это позволит найти количество «истинных» элементов.

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

Даст количество «ложных» элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...