如何识别数据集中最长的Laps连续区间并过滤其余数据?
需求说明
给定如下数据集:
Competitor Laps 1 1 1 2 1 2 3 1 3 4 1 4 5 1 1 6 1 2 7 1 3 8 1 4 9 1 5 10 1 6 11 1 7 12 1 8
需要识别Laps列的最长连续递增区间(连续指数值依次+1),此处第5-12行的区间长度为7,第1-4行长度为3。识别后仅保留该区间内的数据,最终目标数据集如下:
Competitor Laps 5 1 1 6 1 2 7 1 3 8 1 4 9 1 5 10 1 6 11 1 7 12 1 8
实现方法(以Python pandas为例)
导入工具并加载数据
先把数据导入DataFrame,同时保留原始行号作为索引:import pandas as pd # 构造数据集 data = { 'Competitor': [1]*12, 'Laps': [1,2,3,4,1,2,3,4,5,6,7,8] } df = pd.DataFrame(data, index=range(1,13))标记连续递增分组
通过计算Laps列与前一行的差值,当差值不等于1时标记为新分组起点,再累计生成分组ID:# 计算相邻行差值,第一行差值设为1(作为首个分组起点) diff = df['Laps'].diff().fillna(1) # 差值≠1时分组ID递增,否则保持原ID df['group_id'] = (diff != 1).cumsum()筛选最长分组
统计每个分组的行数,找到最长分组对应的ID,再提取该分组的数据:# 统计各分组的行数 group_length = df.groupby('group_id').size() # 获取最长分组的ID longest_group_id = group_length.idxmax() # 筛选目标数据并移除临时分组列 result_df = df[df['group_id'] == longest_group_id].drop('group_id', axis=1)输出结果
执行后result_df即为所需的最终数据集,打印结果如下:print(result_df)
内容的提问来源于stack exchange,提问作者EV_Mustang
相关产品推荐
相关产品推荐

