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

如何获取pandas DataFrame中每个重复事件的首尾索引?

获取连续1事件的首尾索引

可以通过两种简洁的方法实现需求:

方法一:分组聚合

利用分组标记连续的1块,再对每个分组取首尾索引:

import pandas as pd

df = pd.DataFrame({'a': [0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0]})

# 筛选值为1的行
mask = df['a'].eq(1)
# 生成仅针对连续1块的分组键,0的部分分组号为0会被过滤
groups = mask.cumsum() * mask

# 分组后提取每个块的首尾索引,转为目标格式
idxs = groups[mask].groupby(groups[mask]).agg(['first', 'last']).values.tolist()
print(idxs)  # 输出:[[2, 4], [9, 12], [17, 18]]

方法二:识别起始/结束位置

直接定位每个连续1块的起始和结束索引,再配对:

import pandas as pd

df = pd.DataFrame({'a': [0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0]})

# 找出每个连续1块的起始索引(当前是1且前一个不是1)
starts = df[(df['a'] == 1) & (df['a'].shift(1) != 1)].index.tolist()
# 找出每个连续1块的结束索引(当前是1且后一个不是1)
ends = df[(df['a'] == 1) & (df['a'].shift(-1) != 1)].index.tolist()

# 配对首尾索引并转为列表格式
idxs = [list(pair) for pair in zip(starts, ends)]
print(idxs)  # 输出:[[2, 4], [9, 12], [17, 18]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:12