You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:57:03