如何在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
相关产品推荐
相关产品推荐

