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

Pandas如何仅保留连续索引分组中首个值对应的行

Pandas 过滤连续索引分组首行的高效实现

核心思路是通过索引的差分判断连续分组的边界,仅保留每个连续分组的第一行,全部为向量化操作,执行效率极高,适配大流量数据场景。

实现代码

最简写法(推荐)

通过差分直接生成过滤掩码,一步得到结果:

import pandas as pd

# 原始DataFrame构造代码
data = {"A":[i for i in range(10)]}
index = [1, 3, 4, 5, 9, 10, 12, 13, 15, 20]
df = pd.DataFrame(index=index, data=data)

# 核心过滤逻辑
mask = df.index.to_series().diff().ne(1)
result = df[mask]

print(result)

逻辑说明:

  • df.index.to_series()将索引转换为Series,方便调用Pandas内置的差分方法
  • diff()计算相邻索引的差值,第一个元素的差值默认返回NaN
  • ne(1)判断差值是否不等于1,返回布尔掩码:值为True的位置就是新连续分组的第一行,天然包含整个DataFrame的第一行(NaN和1比较结果为True)

分组写法(适配后续聚合需求)

如果后续需要对连续索引分组做其他计算,可以先生成分组编号再取首行:

# 生成连续分组的唯一编号
group_id = df.index.to_series().diff().ne(1).cumsum()
# 每个分组取第一行
result = df.groupby(group_id).first()

输出结果

两种写法都会得到预期输出:

A
1   0
3   1
9   4
12  6
15  8
20  9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04