如何对比两个dataframe的值并按IF条件输出1、0、-1交叉信号
编辑:解决方案在文末
需求说明
对比两个pandas DataFrame的数据,出现正向交叉时输出1,无交叉输出0,负向交叉输出-1,最终将判定结果存入新的DataFrame中。
目前已写出正向交叉的判定逻辑,运行后返回布尔值True,需要在此基础上扩展逻辑实现1、0、-1的输出,现有代码如下:
macd_crossover = (macd > macd_signal) & (macd.shift(1) < macd_signal.shift(1))
数据示例
macd DataFrame示例:
btc 2021-08-26 150 2021-08-27 200 2021-08-28 220 2021-08-29 120
macd_signal DataFrame示例:
btc 2021-08-26 160 2021-08-27 160 2021-08-28 200 2021-08-29 190
期望输出结果
btc 2021-08-26 0 2021-08-27 1 (交叉发生) 2021-08-28 0 2021-08-29 -1 (交叉发生)
已验证可行的解决方案
先计算两个序列的差值,再通过差值的正负变化判断交叉类型,使用numpy的select方法可一次性匹配多条件输出对应值:
import pandas as pd import numpy as np # 计算macd和信号线的差值 df_macd_diff = df_macd - df_macd_signal # 按条件匹配输出结果,保持索引、列名与原数据一致 df_macd_crossover = pd.DataFrame( np.select( condlist= [(df_macd_diff > 0) & (df_macd_diff.shift(1) < 0), (df_macd_diff < 0) & (df_macd_diff.shift(1) > 0)], choicelist = [1, -1], default = 0 ), index = df_macd.index, columns = df_macd.columns )
内容的提问来源于stack exchange,提问作者Alexander Thomsen
相关产品推荐
相关产品推荐

