#python #pandas
#python #pandas
Вопрос:
У меня есть две серии, которые имеют формат, равный этому:
0 False
1 False
2 False
3 True
4 True
Name: foo, dtype: bool
0 True
1 False
2 False
3 True
4 True
Name: bar, dtype: bool
Я хочу создать новую серию с результирующим логическим сравнением из этих. Что-то вроде этого:
result = foo and bar
>>> print result
0 False
1 False
2 False
3 True
4 True
Name: result, dtype: bool
Использование очевидного result = foo and bar
просто приводит к следующей ошибке:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Я посмотрел на эти функции, но, похоже, ни одна из них не выполняет то, что я хочу.
Как я могу выполнить поэлементное логическое сравнение серии, приводящее к созданию новой серии?
Ответ №1:
Вам нужно использовать побитовый оператор and amp;
.
result = foo amp; bar
Комментарии:
1. При сравнении столбца dataframe с определенным значением и последующем выполнении логического сравнения необходимо использовать круглые скобки. Например,
df['column1'] != 'a' amp; df['column2'] != 'b'
сгенерирует ошибкуcannot compare a dtyped [object] array with a scalar of type [bool]
. С другой стороны,(df['column1'] != 'a') amp; (df['column2'] != 'b')
будет работать просто отлично