我的数据帧混合了浮点运算和布尔运算:
df = pd.DataFrame.from_csv("C:\....")
df['isActive'] = (df.turns >= 250) & (df.alivePct > 0) & (df.changePct > 0)
我想创建一个新列,如果isActive==false,则值=0,否则值等于某个计算量,如下所示:
^{pr2}$但是因为数据框激活是一系列我得到这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
三元if/else运算符似乎不能用于矢量化操作。在
我还可以通过手动迭代来实现这一点?在
(注:一个简单的黑客攻击是通过数据框激活它将值设置为0,因为False==0。不过,我想知道一个更通用的解决方案。)
另一种解决方案,也许不那么易读,但很管用。在
新建列/创建列:
戴上面具
^{pr2}$您可以使用np.where:
对于1D数组,
^{pr2}$np.where(condition, A, B)
是向量化的等价物Pandas还提供了一个Series.where方法,您可以使用:
相关问题 更多 >
编程相关推荐