使用.any()后使用np.where返回错误

时间:2019-10-08 21:28:43

标签: python pandas numpy where-clause

我正在处理一个数据框,该数据框需要根据多个条件创建大量标志。我正在使用np.where,但现在遇到了这个错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

出于可复制性和简便性,我只共享产生错误的代码部分以及所使用的列。 正在使用的数据框:

     Data  Uniques  day_a1  day_a2  day_a3
0       1        1       3     NaN     NaN
1       2        2      14    15.0     NaN
2       2        1      10    10.0     NaN
3       3        1      10    10.0    10.0
802     2        2      12     NaN    29.0
806     1        1      29     NaN     NaN

产生错误的代码:

df['flag_3.3.3.1.1'] = np.where(
    (
        (df['Data'] == 3) & 
        (df['day_a1'] != 10) & 
        (df['Uniques'] == 3) & #I ran this separately and it was fine
        (df['day_a1'] > 27 or df['day_a1'] < 4).any()),'flag',np.nan)

.any()之后传递or之后,我似乎仍然有问题。

1 个答案:

答案 0 :(得分:3)

尝试更换

(df['day_a1'] > 27 or df['day_a1'] < 4)

作者

((df['day_a1'] > 27) | (df['day_a1'] < 4))

请注意,|的使用以及优先级的附加括号。