如何基于TimeDiff时间差值拆分Pandas DataFrame为分组
Pandas按相邻时间差拆分分组的解决方案
核心思路是生成分组标识列,通过标记时间差≥2小时的拆分点,累加得到分组编号后再进行groupby操作,完全匹配你的需求。
具体实现代码
假设你的DataFrame名为df,包含ID和TimeDiff列:
- 标记拆分点:识别出需要开启新分组的位置(当前ID与下一个ID的时间差≥2小时)
split_points = df['TimeDiff'] >= 2
- 生成分组编号:将拆分点向下偏移一位,确保当前ID的分组由前一个ID的时间差决定,再累加得到唯一分组ID
df['group_id'] = split_points.shift(1, fill_value=False).cumsum()
- 按分组ID进行分组:
groups = df.groupby('group_id')
- 查看分组结果:
for idx, group in groups: print(f"--------------") print(group[['ID', 'TimeDiff']])
逻辑说明
split_points.shift(1, fill_value=False):把每个拆分点移到下一行,意味着如果上一个ID与当前ID的时间差≥2小时,当前ID就会开启新分组cumsum():累加拆分点标记,每次遇到True就增加分组编号,自动生成连续的分组ID
运行后会得到你需要的4组结果:
-------------- ID TimeDiff 73 73 1.166667 74 74 1.166667 -------------- ID TimeDiff 75 75 2.183333 -------------- ID TimeDiff 76 76 3.466667 -------------- ID TimeDiff 77 77 2.666667 78 78 NaN
注:如果需要将最后一行NaN单独分组,可以额外处理TimeDiff为NaN的情况,比如把split_points改为:
split_points = df['TimeDiff'].fillna(2) >= 2
内容的提问来源于stack exchange,提问作者AndrewChao
相关产品推荐
相关产品推荐

