Pandas逐行判断High列是否接近lifetime列输出0/1布尔值的方法
问题原因
math.isclose仅支持单个标量数值比较,不支持直接对pandas Series执行逐元素运算,因此会报错。- 原代码存在变量名不一致问题:读入的行情对象命名为
data,但赋值lifetime列时使用了未定义的df,会额外触发名称错误。 - 注意Python标准库
math.isclose的相对公差参数名为rel_tol,但numpy对应方法的参数名为rtol,不要混淆。
正确实现代码
import pandas as pd from pandas_datareader import data as web import numpy as np data = web.DataReader('goog', 'yahoo') # 计算滚动历史最高价 data['lifetime'] = data['High'].asfreq('D').rolling(window=999999, min_periods=1).max() # 逐行近似判断,直接转换为1/0输出 data['isclose'] = np.isclose(data['High'], data['lifetime'], rtol=0.003).astype(int)
如果你需要输出布尔值而非1/0,去掉末尾的.astype(int)即可。
内容的提问来源于stack exchange,提问作者Slartibartfast
相关产品推荐
相关产品推荐

