我正在编写一个快速而肮脏的数据清理脚本,我需要检查数据列是否具有正确的相对排名。
数据帧如下所示:
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:条件需要布尔数组,而不是对象
这就是我想要做的:
- 设置布尔标志,这是上面测试的结果
- 将布尔值转换为int(0,1(
- 求整数列的和,看看它是否是非零数字
如何根据测试条件在数据帧的列中设置标志?
掩码应该是:
mask = (df.hi >= df.op) & (df.hi >= df.lo) & (df.hi >= df.cl) & (df.lo <= df.op) & (df.lo <= df.cl)
用df[mask]
将其插入df