Reputation: 3619
Not sure how to use .bool(), any, all, or empty, to make the two different examples work. Each throws me the Ambiguous Value error
import pandas as pd
first = pd.Series([1,0,0])
second = pd.Series([1,2,1])
number_df = pd.DataFrame( {'first': first, 'second': second} )
bool_df = pd.DataFrame( {'testA': pd.Series([True, False, True]), 'testB': pd.Series([True, False, False])})
#ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
""" both the next two lines fail with the ambiguous Series issue"""
#each row should be true or false
bool_df['double_zero_check'] = (number_df['first'] != 0) and (number_df['second'] != 0 )
bool_df['parity'] = bool_df['testA'] and bool_df['testB']
Upvotes: 0
Views: 142
Reputation: 11717
You have to use the bitwise and (&) operator. and
works for boolean not for Pandas Series.
bool_df['double_zero_check'] = (number_df['first'] != 0) & (number_df['second'] != 0 )
bool_df['parity'] = bool_df['testA'] & bool_df['testB']
Upvotes: 2
Reputation: 52276
You need to use the bitwise and (&
) to compare Series elementwise - more in the docs
In [3]: bool_df['double_zero_check'] = (number_df['first'] != 0) & (number_df['second'] != 0 )
In [4]: bool_df['parity'] = bool_df['testA'] & bool_df['testB']
In [5]: bool_df
Out[5]:
testA testB double_zero_check parity
0 True True True True
1 False False False False
2 True False False False
Upvotes: 2