我知道以前也曾问过类似的问题,但我一直在努力理解为什么会出现此错误。
我正在使用下面的代码创建一个新列,如果“价格”在上限“ price_h2”和下限“ price_h1”之间,则将该行标记为离群值
df_test['price_outlier'] = np.where( df_test['price_h1'] <= df_test['price'] <= df_test['price_h2'],'normal','outlier')
非常感谢您的帮助!
答案 0 :(得分:2)
因为numpy数组不支持以下语法: a
您需要使用括号将两个子句分开 (a
df_test['price_outlier'] = np.where((df_test['price_h1'] <= df_test['price']) &\
(df_test['price'] <= df_test['price_h2']),
'normal', 'outlier')
答案 1 :(得分:1)
这样做的原因是,如果您尝试在多元素布尔系列上广播操作,熊猫会选择抛出一个错误,因为它固有地对行为的模棱两可。
pandas遵循NumPy约定,当您尝试将某些内容转换为bool时会引发错误。这在if语句中或在使用布尔运算时发生:和,或,和非。目前尚不清楚以下代码的结果是什么:
有关此行为的更多信息,请参见the pandas documentation。
关于如何使所需的行为起作用;请记住,您可以使用许多不同的数据类型(列表,字典,ndarray等)将一列分配给数据框。因此,可以避免序列比较问题的一种简单方法是使用列表理解。
df_test['price_outlier'] = [a <= b <= c for a, b, c in zip(df_test['price_h1'], df_test['price'], df_test['price_h2'])]