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

Pandas如何删除指定列值且相邻时间差小于5分钟的DataFrame行

解决方案

你这个需求的核心是按时间顺序遍历,仅保留与上一条已保留记录时间差≥5分钟的首条记录,直接用相邻行做差的方式无法处理连续短间隔的场景,可参考以下实现:

实现代码

import pandas as pd

# 先筛选目标类型数据,再按时间字段升序排序,避免原始数据顺序错乱导致计算偏差
df_b = df[df.columntype == 'B'].sort_values('timeframe').reset_index(drop=True)

if len(df_b) == 0:
    result = df_b
else:
    # 首条记录默认保留
    keep_flags = [True]
    last_kept_time = df_b.loc[0, 'timeframe']

    # 从第二条记录开始逐行判断
    for idx in range(1, len(df_b)):
        curr_time = df_b.loc[idx, 'timeframe']
        if curr_time - last_kept_time >= pd.Timedelta(minutes=5):
            keep_flags.append(True)
            last_kept_time = curr_time
        else:
            keep_flags.append(False)
    
    result = df_b[keep_flags]

逻辑说明

  • 拿你提供的样例数据跑这段代码:首条2021-05-19 10:17:00默认保留,后续4条和它的间隔都是1分钟,全部过滤;到2021-05-25 09:49:00时,和上一条保留记录的间隔远大于5分钟,予以保留,后续2条和它的间隔为0、1分钟,全部过滤;最后2021-07-08 10:33:00和上一条保留记录的间隔达标,予以保留,最终输出和你给出的预期结果完全一致。
  • 不直接使用df.timeframe.diff()做判断的原因:该方法仅计算当前行与紧邻上一行的时间差,遇到连续多条短间隔记录时(比如连续6条每条间隔1分钟),会错误保留累计间隔刚好到5分钟的行,不符合你要的按组保留首条的去重逻辑。
  • 该实现在十万行级别的数据集上运行没有性能压力,如果是百万级以上的超大数据集,可以替换为向量化写法优化速度,核心判断逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:33:23