Python Pandas:数据框/系列中元素的比较

问题描述 投票:0回答:2

我在一个名为“ 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()

我想念什么?

python pandas numpy numpy-ndarray
2个回答
2
投票

我们可以不使用自定义功能

myDataFrame['result'] = np.where(myDataFrame['status']==0,
                                 myDataFrame['Count']+10000,
                                 myDataFrame['Count']-10000)

0
投票

我认为您的功能实际上并没有完成向量化部分。

被调用时,您传递了status = myDataFrame['status'],因此当它到达第一个if时,它将检查myDataFrame['status'] == 0的条件。但是myDataFrame['status'] == 0是一个布尔级数(status列的每个元素是否等于0),因此它没有单个Truth值(因此出现错误)。同样,如果可以满足条件,则resultsList只会附加整个"Count"列,要么全为10000,要么全为负10000。

© www.soinside.com 2019 - 2024. All rights reserved.