如何将Pandas DataFrame按时间差阈值分割为时间簇子数据集
高效实现方案
核心思路是通过Pandas向量化操作生成分组ID,再用groupby直接拆分,全程无显式循环,性能远高于逐行遍历,百万级数据也可以在毫秒级完成处理。
完整实现代码
import pandas as pd # 你的原有预处理逻辑:按时间排序、计算相邻行时间差 df = df.sort_values("Time") df['t_dif'] = df['Time'] - df['Time'].shift(-1) # 新增分组拆分逻辑 threshold = 40 # 标记分割点:相邻时间差绝对值≥阈值的位置需要切分 split_points = df['t_dif'].abs() >= threshold # 生成连续分组ID:分割点的下一行属于新分组,累加计数得到唯一组号 df['group_id'] = split_points.shift(fill_value=False).cumsum() # 拆分得到子DataFrame列表,索引0对应你说的df1,索引1对应df2,以此类推 sub_dfs = [group for _, group in df.groupby('group_id')] # 如果不需要保留t_dif、group_id辅助列,可以用下面的代码替换上面的拆分逻辑 # sub_dfs = [group.drop(columns=['t_dif', 'group_id']) for _, group in df.groupby('group_id')]
效果说明
输出sub_dfs[0]、sub_dfs[1]即可匹配你给出的df1、df2预期效果,你可以直接按照索引取用对应的子数据集。
内容的提问来源于stack exchange,提问作者MesRot
相关产品推荐
相关产品推荐

