如何获取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
相关产品推荐
相关产品推荐

