如何在Python的Pandas Series中按固定分段提取最大值?
解决Pandas Series按每n个元素分组取最大值并保留顺序的问题
nlargest确实不适合你的场景——它是从整个Series里提取前n个最大值并降序排列,和你需要的按固定窗口分组取每组最大值、保留组顺序的需求不匹配。
正确实现方式
核心思路是先给Series的元素按每n个一组分配分组标识,再按分组取最大值,这样就能保留原分组的顺序。
代码示例
假设你有如下Series:
import pandas as pd import numpy as np s = pd.Series([2, 1, 3, 5, 3, 6, 1, 6, 9]) n = 3
生成分组标识,每n个元素为一组:
groups = np.arange(len(s)) // n
然后分组取最大值:
result = s.groupby(groups).max()
执行后result的结果就是:
0 3 1 6 2 9 dtype: int64
如果不需要保留分组索引,也可以用reset_index(drop=True)去掉:
result = s.groupby(groups).max().reset_index(drop=True)
原理说明
np.arange(len(s)) // n会生成一个和Series长度相同的数组,比如n=3时,数组是[0,0,0,1,1,1,2,2,2],对应每3个元素一组的分组标记。groupby(groups)会按标记把元素分成对应的组,再调用max()就能得到每组的最大值,且分组顺序和原Series的分组顺序一致。
内容的提问来源于stack exchange,提问作者SakshamSolanki
相关产品推荐
相关产品推荐

