首页 > 解决方案 > Python IF OR -> Series 的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

问题描述

我有一个“PreHeat”列,我想创建一个新列“PreHeat_Outlier_TestX”,如果值是异常值(真,假),将在其中写入。

我可以用一种条件来管理它:

df['PreHeat_Outlier_TestX'] = (df['PreHeat'] > df['PreHeat'].quantile(0.75))

但是当我尝试使用 OR 或 ifelse 时,我得到了以下错误: ValueError: The truth value of a Series is ambiguous. 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

if (df['PreHeat'] > df['PreHeat'].quantile(0.75)):
    df['PreHeat_Outlier_TestX'] = True
elif (df['PreHeat'] < df['PreHeat'].quantile(0.25)):
    df['PreHeat_Outlier_TestX'] = True
else: 
    df['PreHeat_Outlier_TestX'] = False


if (df['PreHeat'] > df['PreHeat'].quantile(0.75)) or (df['PreHeat'] < df['PreHeat'].quantile(0.25)):
   df['PreHeat_Outlier_TestX'] = True
else:
   df['PreHeat_Outlier_TestX'] = False

我不确定,代码有什么问题。有人可以帮我吗?

标签: pythonpandasif-statement

解决方案


跟随 if 应该始终是一个布尔值Trueor False。您传递了一个不能转换为布尔值的系列。查看np.select

与 类似or,也请参阅此问题

你想做什么

if (df['PreHeat'] > df['PreHeat'].quantile(0.75)):
    df['PreHeat_Outlier_TestX'] = True
elif (df['PreHeat'] < df['PreHeat'].quantile(0.25)):
    df['PreHeat_Outlier_TestX'] = True
else: 
    df['PreHeat_Outlier_TestX'] = False

应该做

df['PreHeat_Outlier_TestX'] = ~df['PreHeat'].between(df['PreHeat'].quantile(0.25), df['PreHeat'].quantile(0.75))

推荐阅读