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

如何在Pandas中比较当前行与前后n行并生成结果列

解决DataFrame行值与前后n行比较的问题

我们可以通过滑动窗口结合自定义逻辑实现需求,以下是具体步骤和代码示例:

核心逻辑

对每一行需同时满足两个条件才返回True:

  • 当前行的值小于前n行的所有值(首n行因缺少足够前置行,直接返回False)
  • 当前行的值小于后n行的所有值(末n行因缺少足够后置行,直接返回False)

代码实现(以n=2为例)

先构造示例DataFrame:

import pandas as pd

df = pd.DataFrame({'a': [15, 16, 13, 17, 20]})

通过滑动窗口和位移操作完成比较:

n = 2

# 检查当前值是否小于前n行的最大值(小于最大值即小于所有值)
less_than_previous = df['a'] < df['a'].rolling(window=n, min_periods=1).max().shift(1)
less_than_previous.iloc[:n] = False  # 前n行无足够前置行,结果设为False

# 反向滑动窗口处理后n行的比较
less_than_next = df['a'] < df['a'][::-1].rolling(window=n, min_periods=1).max()[::-1].shift(-n)
less_than_next.iloc[-n:] = False  # 末n行无足够后置行,结果设为False

# 合并两个条件生成新列
df['b'] = less_than_previous & less_than_next

运行后得到目标结果:

a      b
0  15  False
1  16  False
2  13   True
3  17  False
4  20  False

补充说明

  • 用窗口最大值做比较是因为:若当前值小于窗口内的最大值,则必然小于窗口内所有值,这种方式比逐个比较更高效。
  • 首n行和末n行直接设为False,是因为它们无法满足"拥有完整前n行/后n行"的前提条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:44:57