В pandas, я хотел бы создать вычисляемый столбец, который выполняет логическую операцию на двух других столбцах.
В pandas легко добавить два числовых столбца. Я хотел бы сделать что-то подобное с логическим оператором AND
. Здесь моя первая попытка:
In [1]: d = pandas.DataFrame([{'foo':True, 'bar':True}, {'foo':True, 'bar':False}, {'foo':False, 'bar':False}])
In [2]: d
Out[2]:
bar foo
0 True True
1 False True
2 False False
In [3]: d.bar and d.foo ## can't
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Итак, я думаю, что логические операторы работают не так, как числовые операторы в pandas. Я попытался сделать то, что предлагает сообщение об ошибке, и используя bool()
:
In [258]: d.bar.bool() and d.foo.bool() ## spoiler: this doesn't work either
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Я нашел способ, который работает, отбрасывая булевские столбцы до int
, добавляя их вместе и оценивая как логическое.
In [4]: (d.bar.apply(int) + d.foo.apply(int)) > 0 ## Logical OR
Out[4]:
0 True
1 True
2 False
dtype: bool
In [5]: (d.bar.apply(int) + d.foo.apply(int)) > 1 ## Logical AND
Out[5]:
0 True
1 False
2 False
dtype: bool
Это свернуто. Есть ли лучший способ?