如何从pandas数据帧中的bool和float列计算新的矢量化列?

2024-09-30 14:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧混合了浮点运算和布尔运算:

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。不过,我想知道一个更通用的解决方案。)


Tags: csvthe数据fromfalsedataframedf错误
2条回答

另一种解决方案,也许不那么易读,但很管用。在

新建列/创建列:

>>> df
   0      1  2
0  1   True  9
1  2  False  9
2  3   True  9
3  4  False  9
4  5   True  9
>>> df[3] = 0

戴上面具

^{pr2}$

您可以使用np.where

import numpy as np
df['interestingness'] = np.where(df.isActive, df.changePct * df.alivePct, 0)

对于1D数组,np.where(condition, A, B)是向量化的等价物

^{pr2}$

Pandas还提供了一个Series.where方法,您可以使用:

df['interestingness'] = (df.changePct * df.alivePct).where(df.isActive, 0)

相关问题 更多 >