带布尔运算的Pandas掩码:ValueError:条件需要布尔数组,而不是对象



我正在编写一个快速而肮脏的数据清理脚本,我需要检查数据列是否具有正确的相对排名。

数据帧如下所示:

dt                        op     hi      lo        cl        vol           adj       prev                                                        
1986-01-02  1986-01-02  177.00  177.00  177.0000  177.00   75.8732         0.0         NaN
1986-01-03  1986-01-03  176.00  176.00  176.0000  176.00   75.4447         0.0  1986-01-02
1986-01-06  1986-01-06  172.00  172.00  172.0000  172.00   73.7299         0.0  1986-01-03
1986-01-07  1986-01-07  167.00  167.00  167.0000  167.00   71.5868         0.0  1986-01-06
1986-01-09  1986-01-09  168.00  168.00  168.0000  168.00   72.0153         0.0  1986-01-07
...                ...     ...     ...       ...     ...       ...         ...         ...
2020-09-14  2020-09-14  102.20  105.60  101.6500  104.70  104.7000   9720916.0  2020-09-11
2020-09-15  2020-09-15  106.45  110.70  106.4500  109.25  109.2500  15923105.0  2020-09-14
2020-09-16  2020-09-16  107.95  112.55  107.9500  112.10  112.1000  15399144.0  2020-09-15
2020-09-17  2020-09-17  110.40  112.85  110.0500  112.00  112.0000   6737225.0  2020-09-16
2020-09-18  2020-09-18  111.50  111.75  109.3923  110.75  110.7500  25308704.0  2020-09-17

我想创建一个这样的掩码:

mask = df[(df.hi >= df.op) & (df.hi >= df.lo) & (df.hi >= df.cl) & (df.lo <= df.op) & (df.lo <= df.cl)]

然而,当我尝试使用df[mask]从df中进行选择时,我会收到错误消息:

ValueError:条件需要布尔数组,而不是对象

这就是我想要做的:

  1. 设置布尔标志,这是上面测试的结果
  2. 将布尔值转换为int(0,1(
  3. 求整数列的和,看看它是否是非零数字

如何根据测试条件在数据帧的列中设置标志?

掩码应该是:

mask = (df.hi >= df.op) & (df.hi >= df.lo) & (df.hi >= df.cl) & (df.lo <= df.op) & (df.lo <= df.cl)

df[mask]将其插入df

最新更新