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

Pandas DataFrame 如何按start列±3范围保留score最高的行?

Pandas 按 start 列±3区间保留最高score行实现

实现逻辑

  • 先对start列做升序排序,将相邻start差值≤3的行划为同一个连通区间(完全匹配你给出的示例判定规则)
  • 按区间分组,直接保留每组score最高的行即可

完整可运行代码

import pandas as pd

# 原始输入数据
data = {'id':['id1', 'id2', 'id3', 'id4', 'id5', 'id6'],
       'start':[1,12,11,2,20,3],
       'score':[3,1,8,2,5,9]}
df = pd.DataFrame(data, columns=['id', 'start', 'score'])

# 1. 按start升序排序,重置索引避免后续取值错误
df = df.sort_values('start', ignore_index=True)

# 2. 划分区间:相邻start差值>3则判定为新组,累计得到每个行的组号
group_marks = (df['start'].diff() > 3).cumsum()

# 3. 按组取score最高的行
result = df.loc[df.groupby(group_marks)['score'].idxmax()].reset_index(drop=True)

print(result)

运行输出

id  start  score
0  id6      3      9
1  id3     11      8
2  id5     20      5

完全匹配你给出的期望输出结果。

扩展说明

  • 若需要调整区间阈值(比如改为±5),只需修改分组步骤中diff() > 3里的数字为对应阈值即可
  • 该逻辑自动处理重复start、多连续点跨区间等特殊场景,无需额外调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 12:54:03