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

如何在Pandas DataFrame中高效计算当前行3行范围内的列最大值?

高效计算Pandas DataFrame滑动窗口最大值(前后3行范围)

问题背景

现有如下Pandas DataFrame:

import pandas as pd
data = pd.DataFrame(data={'input':[1,2,3,4,5,6,7,8,9,10,
                                   11,12,13,14,15,14.5,
                                   13.5,12.5,11.5,10.5,
                                   9.5,8.5,7.5,6.5,5.5,
                                   4.5,3.5,2.5,1.5,0.5]})

需要在input列右侧新增一列max,存储当前行前后3行范围内input列的最大值,预期结果如下:

data['max'] = [4,5,6,7,8,9,10,11,12,13,
               14,15,15,15,15,15,15,15,14.5,13.5,12.5,
               11.5,10.5,9.5,8.5,7.5,6.5,5.5,4.5,3.5]

由于数据量达百万级,逐行迭代的方式效率过低,需要采用基于向量化的高效数组操作方法。

解决方案

使用Pandas内置的rolling方法实现中心滑动窗口计算,完全基于向量化操作,性能远优于逐行循环:

import pandas as pd

data = pd.DataFrame(data={'input':[1,2,3,4,5,6,7,8,9,10,
                                   11,12,13,14,15,14.5,
                                   13.5,12.5,11.5,10.5,
                                   9.5,8.5,7.5,6.5,5.5,
                                   4.5,3.5,2.5,1.5,0.5]})

# 计算前后3行范围内的最大值
data['max'] = data['input'].rolling(window=7, center=True, min_periods=1).max()

# 验证结果(可选)
print(data['max'].tolist())

参数说明

  • window=7:窗口覆盖当前行及前后各3行,总计7行数据
  • center=True:将当前行设为窗口的中心位置,确保窗口包含前后3行
  • min_periods=1:允许窗口中至少存在1个数据点,自动处理首尾无法凑齐7行的边界情况

扩展说明

后续需要计算min列时,只需将.max()替换为.min()即可,同样基于向量化操作,效率一致:

data['min'] = data['input'].rolling(window=7, center=True, min_periods=1).min()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:22:35