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

Python Pandas如何实现当前两行与前两行的滚动对比及实时校验

解决方案

一、全量历史数据新增Cond11列

你要实现的两行和前两行对比逻辑,用pandas向量化运算即可高效实现,无需自定义滚动apply(性能更高):
核心逻辑:两行均值对比等价于两行和的对比(两边都除以2,大小关系完全一致),因此我们先计算n列的2行滚动和,再将当前2行滚动和与前2个位置的滚动和对比即可:

# 计算n列每连续2行的和
roll2_sum = df['n'].rolling(2).sum()
# 当前2行和 > 往前数的前2行和,即为满足条件
df['Cond11'] = roll2_sum > roll2_sum.shift(2)
  • 注意:最终结果的前3行(索引0、1、2)会返回NaN,属于正常逻辑:至少需要4行数据才能完成两组2行数据的对比,前3行没有足够的前置数据做校验。

如果你习惯用rolling(4)的写法也可以实现,仅性能略低于上述向量化方案:

df['Cond11'] = df['n'].rolling(4).apply(lambda x: x[-2:].mean() > x[:2].mean()).astype(bool)

二、实时场景校验最新行的代码修正

你给出的代码不能正确校验条件,问题出在Python的切片规则为左闭右开:

  • candles.n[-2:-1].sum() 只会取倒数第2行的单值,不是最后两行的和
  • candles.n[-4:-3].sum() 只会取倒数第4行的单值,不是倒数第4、3行的和
    正确写法如下:
# 取最后两行的和 与 倒数第4、3行的和对比
cond11 = candles.n.iloc[-2:].sum() > candles.n.iloc[-4:-2].sum()
  • 注意:执行该校验前需要先判断dataframe的行数至少≥4,否则会触发索引越界错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 20:54:01