Логическое сравнение двух объектов серии

#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') будет работать просто отлично