#python #python-3.x #pandas
#python #python-3.x #pandas
Вопрос:
Мой фрейм данных содержит один столбец с логическими значениями, т.е. 0 или 1. Я пытаюсь проверить, соответствует ли оно 0, затем увеличьте счетчик для count_0
else increment for count_1
.
if(df1['Project_is_approved']==0):
count_0 = count_0 1;
if(df1['Project_is_approved']==1):
count_1 = count_1 1;
Либо count_0
или count_1
должно увеличиваться.
Вместо этого я получаю ошибку при,
if(df1['Project_is_approved']==0):
Ошибка:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Ответ №1:
Когда вы говорите pandas проверить, равен ли ряд (столбец) чему-либо, есть ряд вещей, которые он может интерпретировать как. По замыслу pandas предпочитает не угадывать, а вместо этого выдает ошибку, которая должна привести вас к использованию более конкретных методов.
Я предполагаю, что ваша конечная цель — подсчитать, сколько 0 и сколько единиц содержится в ряду. Для этого, предполагая, что столбцы «Project_is_approved» состоят из 0 и 1, вы можете просто выполнить следующее:
df1["Project_is_approved"][df1["Project_is_approved"] == 1].count()
Способ, которым это работает, слева направо:
1. Выберите столбец «Project_is_approved» из df1
.
2. Исходя из этого, примените логическую маску: сохраняйте только элементы, для которых содержимое «Project_is_approved» равно 1.
3. Подсчитайте, сколько элементов находится в этом выборе.
Вы можете сделать то же самое для подсчета 0, просто заменив 1 на 0 внутри маски.
Ответ №2:
Самый простой способ сделать это — суммировать столбец:
count_1 = sum(df1['Project_is_approved'])
count_0 = len(df1['Project_is_approved']) - count_1
Это работает как для правильных логических значений True
False
, так и для целых значений: и 0
1