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

如何在Pandas滚动窗口中标记中间值为子集最大值的行

实现方案

你可以直接通过pandas的rolling滚动窗口功能实现需求,完整代码如下:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'time_index': range(1, 11),
    'values': [21,5,25,0,4,13,20,2,15,21]
})

# 核心逻辑:3大小滚动窗口,标签对齐中间位置,判断中间值是否为窗口最大值
df['is_peak'] = df['values'].rolling(window=3, center=True).apply(
    lambda x: x[1] == x.max(), raw=True
).astype('boolean')

# 首尾无完整窗口的空值填充为False,可根据需求调整
df['is_peak'] = df['is_peak'].fillna(False)

参数说明

  • window=3:指定滚动窗口大小为3
  • center=True:将窗口的计算结果对齐到窗口的中间位置,刚好匹配给中间值打标记的需求
  • raw=True:传入lambda函数的参数为numpy数组,直接通过索引[1]取中间值,运行效率更高
  • astype('boolean'):将apply默认返回的浮点类型转换为布尔类型,方便后续数据处理
  • fillna(False):首尾两个位置无法形成完整的3元素窗口,默认返回空值,这里统一填充为False

运行后输出的df结果如下,完全匹配你给出的示例逻辑:

索引time_indexvaluesis_peak
0121False
125False
2325True
340False
454False
5613False
6720True
782False
8915False
91021False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:07