我在一个名为“ myDataFrame”的变量中有一个DataFrame,看起来像这样:
+---------+-----+-------+-----
| Type | Count | Status |
+---------+-----+-------+-----
| a | 70 | 0 |
| a | 70 | 0 |
| b | 70 | 0 |
| c | 74 | 3 |
| c | 74 | 2 |
| c | 74 | 0 |
+---------+-----+-------+----+
我使用矢量化方法来处理此DataFrame中的行,因为我拥有的行数约为1.16亿。
所以我写了这样的东西:
myDataFrame['result'] = processDataFrame(myDataFrame['status'], myDataFrame['Count'])
在我的工作中,我正在尝试这样做:
def processDataFrame(status, count):
resultsList = list()
if status == 0:
resultsList.append(count + 10000)
else:
resultsList.append(count - 10000)
return resultsList
但是我得到这个用于比较状态值:
Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
我想念什么?
我们可以不使用自定义功能
myDataFrame['result'] = np.where(myDataFrame['status']==0,
myDataFrame['Count']+10000,
myDataFrame['Count']-10000)
我认为您的功能实际上并没有完成向量化部分。
被调用时,您传递了status = myDataFrame['status']
,因此当它到达第一个if
时,它将检查myDataFrame['status'] == 0
的条件。但是myDataFrame['status'] == 0
是一个布尔级数(status
列的每个元素是否等于0),因此它没有单个Truth值(因此出现错误)。同样,如果可以满足条件,则resultsList
只会附加整个"Count"
列,要么全为10000,要么全为负10000。