如何用Pandas实现带偏移和条件的最大值定位?
使用Pandas实现窗口最大值中心匹配需求
首先可以通过Pandas的窗口滚动功能直接实现需求,步骤如下:
- 还原示例DataFrame
import pandas as pd df = pd.DataFrame({'A': [3,2,5,4,1,2,7,3,1]})
- 计算中心对齐的5元素窗口最大值
用rolling创建大小为5、中心对齐的窗口,这样每个索引对应的窗口会以自身为中心展开(边缘索引的窗口元素不足5个时会返回NaN),再计算窗口内的最大值:
window_max = df['A'].rolling(window=5, center=True).max()
- 生成目标Res列
对比原A列和窗口最大值列,当两者相等时保留A的数值,否则填充0:
df['Res'] = df['A'].where(df['A'] == window_max, 0)
执行后得到的结果完全符合预期:
A Res 0 3 0 1 2 0 2 5 5 3 4 0 4 1 0 5 2 0 6 7 7 7 3 0 8 1 0
关键说明
center=True是核心参数,确保窗口以当前索引为中心,精准匹配"最大值位于5个数据中心位置"的要求。- 边缘索引的窗口元素不足5个,
rolling.max()会返回NaN,此时where方法自动将这些位置的Res设为0,无需额外处理。
内容的提问来源于stack exchange,提问作者Fresto
相关产品推荐
相关产品推荐

