【发布时间】:2023-03-12 04:19:01
【问题描述】:
我的 DataFrame 混合了浮点数和布尔值:
df = pd.DataFrame.from_csv("C:\....")
df['isActive'] = (df.turns >= 250) & (df.alivePct > 0) & (df.changePct > 0)
我想创建一个新列,如果 isActive == false 则 value = 0,否则该值等于某个计算量,如下所示:
df['interestingness'] = (df.changePct * df.alivePct) if df.isActive else 0
但是因为 df.isActive 是一个系列,我得到这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
三元 if/else 运算符似乎不能用于向量化操作。
我还能如何通过手动迭代来做到这一点?
(注意:一个简单的技巧是通过 df.isActive 将值设置为 0 为 False == 0。但是我想知道一个更通用的解决方案。)
【问题讨论】:
-
你说的更一般是什么意思?另外,为什么它是一个黑客?它并没有比乘法更通用/更简单......
-
另外,我的意思是,我看到您关心“如果布尔值不是 0 和 1 怎么办?”但我想,是的,只需将它们转换为 0 和 1 并返回乘法。
np.where解决方案也不错。
标签: python pandas dataframe ternary-operator