Python Pandas:如何获取间隔指定行数的两个最大数值
实现方案说明
仅靠pandas.Series.nlargest()无法直接满足需求,这个方法只会按数值大小返回前N个结果,不会校验行索引差的约束。你可以参考以下简便实现逻辑:
核心思路
- 先把所有数据按
Pressure值从大到小排序,同时保留原始行索引 - 从排序后的第一个元素(全局最大值)开始,依次向后匹配第一个与它的索引差大于指定阈值的元素,就是符合要求的次大值
- 如果需要取更多符合要求的数值,只需要扩展校验逻辑,保证新选的元素和所有已选元素的索引差都满足要求即可
示例代码
1. 构造测试数据
import pandas as pd data = {'Pressure' : [100,112,114,120,123,420,1222,132,123,333,123,1230,132,1,23,13,13,13,123,13,123,3,222,2303,1233,1233,1,1,30,20,40,401,10,40,12,122,1,12,333],} df = pd.DataFrame(data)
2. 核心实现代码
# 按Pressure降序排列,保留原始行索引 sorted_df = df.sort_values('Pressure', ascending=False).reset_index(names='original_idx') min_index_gap = 5 # 自定义最小索引差 selected = [sorted_df.iloc[0]] # 先存入全局最大值 # 遍历找符合要求的第二个值 for _, row in sorted_df.iloc[1:].iterrows(): if all(abs(row['original_idx'] - s['original_idx']) > min_index_gap for s in selected): selected.append(row) break # 找两个就停止,需要更多就去掉break # 输出结果 result = pd.DataFrame(selected)[['original_idx', 'Pressure']] print(result)
运行结果说明
针对你提供的测试数据,运行后会得到如下结果:
| original_idx | Pressure |
|---|---|
| 23 | 2303 |
| 6 | 1222 |
两个值的索引差为17,满足大于5的要求。
内容的提问来源于stack exchange,提问作者SeanK22
相关产品推荐
相关产品推荐

