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

高效优雅地获取Pandas Series子区间最大值的方法

高效生成向后滚动子区间最大值序列(Pandas)

给定如下Pandas Series:

index | value
-------------
0     | 2
1     | 0
2     | 8
3     | 0
4     | 1
5     | 2
6     | 7
7     | 4
8     | 2
9     | 9
10    | 0
11    | 0

需要生成向后滚动子区间最大值序列:对每个索引i,取从i开始的最多5个元素的最大值(不足5个时取剩余所有元素的最大值),期望结果如下:

index | value
-------------
0     | 8
1     | 8
2     | 8
3     | 7
4     | 7
5     | 9
6     | 9
7     | 9
8     | 9
9     | 9
10    | 0
11    | 0

高效实现方案

完全不需要用迭代(iloc/iterrows这类方法效率极低),可以利用Pandas的向量化滚动窗口API,通过「反转序列+向前滚动+再反转」的方式实现,全程是批量操作,性能拉满:

import pandas as pd

# 原始Series
s = pd.Series([2, 0, 8, 0, 1, 2, 7, 4, 2, 9, 0, 0])
window_size = 5

# 核心实现:反转后转向前滚动计算,再反转回原顺序
result = s[::-1].rolling(window=window_size, min_periods=1).max()[::-1]

# 输出验证
print(result)

逻辑说明

  • s[::-1]:将原始序列反转,把「向后取窗口」的需求转化为Pandas原生支持的「向前取窗口」需求
  • rolling(window=window_size, min_periods=1).max():对反转后的序列做向前滚动最大值计算,min_periods=1参数保证当剩余元素不足窗口大小时,仍能取现有元素的最大值
  • 最后用[::-1]反转回原顺序,直接得到目标结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:31:22