代码中:
df = pd.DataFrame([[False, 0], [False, 1], [False, 2], [False, 2], [False, 3], [False, 4], [False, 5]],
columns=['cond1', 'cond2'])
df['test'] = (~df['cond1']) & (df['cond2'])
我期望在
test
列中获得除第一行之外的所有行中的值 True
,因为除 0 之外的任何数字的真值都是 True
。但是,我得到 False
,其中 cond2
中的值为 2 或 4。为什么?
上述代码的输出:
cond1 cond2 test
0 False 0 False
1 False 1 True
2 False 2 False
3 False 2 False
4 False 3 True
5 False 4 False
6 False 5 True
当你对pandas列进行“&”操作时,python无法解释其他数字。它进行的是集合运算而不是布尔运算。因此,您需要通过将第二列转换为 bool 来帮助它:
df = pd.DataFrame([[False, 0], [False, 1], [False, 2], [False, 2], [False, 3], [False, 4], [False, 5]],
columns=['cond1', 'cond2'])
df['test'] = (~df['cond1']) & ((df['cond2'].astype(bool)))