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

如何为Pandas DataFrame实现重叠连续交易信号的均值过滤?

问题

我有如下结构的Pandas DataFrame:

time price buy sell
1    1     0   0
2    1     buy 0
3    1     buy 0
4    1     buy 0
5    1     0   sell
6    1     0   sell

需要实现重叠连续信号的均值过滤(比如连续出现的buy信号),最终得到包含signal列的目标DataFrame:

time price buy sell  signal
1    1     0   0     0
2    1     buy 0     buy
3    1     buy 0     0
4    1     buy 0     0
5    1     0   sell  sell
6    1     0   sell  0

请问具体该如何实现?

解决方案

核心思路是只保留连续相同信号的第一个出现值,后续连续重复的信号替换为0,具体实现步骤如下:

  • 先构造示例DataFrame(已有数据可跳过此步):
import pandas as pd

df = pd.DataFrame({
    'time': [1,2,3,4,5,6],
    'price': [1,1,1,1,1,1],
    'buy': ['0', 'buy', 'buy', 'buy', '0', '0'],
    'sell': ['0', '0', '0', '0', 'sell', 'sell']
})
  • 生成初始信号列:优先取buy列的有效信号,若无则取sell列,都无则为0
df['signal'] = df.apply(lambda x: x['buy'] if x['buy'] != '0' else x['sell'], axis=1)
  • 过滤连续重复信号:对比当前行与上一行的信号,若相同且为有效信号,则替换为0
df['signal'] = df.apply(
    lambda x: '0' if (x['signal'] == df['signal'].shift(1)) and (x['signal'] != '0') else x['signal'],
    axis=1
)

# 若需要将字符串'0'转为数字0,执行以下代码
df['signal'] = df['signal'].replace('0', 0)

执行后得到的结果就是目标DataFrame:

time  price  buy   sell signal
0     1      1    0      0      0
1     2      1  buy      0    buy
2     3      1  buy      0      0
3     4      1  buy      0      0
4     5      1    0  sell   sell
5     6      1    0  sell      0

适配说明

  • 如果原始数据中buy/sell列的0是数字类型,只需把判断条件中的x['buy'] != '0'改为x['buy'] != 0即可。
  • 该方法通过去重连续重复信号实现“均值过滤”的效果,连续相同信号仅保留首次触发值,等价于对连续信号做了单次触发的简化处理。

内容的提问来源于stack exchange,提问作者SARVAGYA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:25:16