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

如何筛选ID与DATE相同且连续值≥14的DataFrame数据

问题描述

从给定的DataFrame中筛选出满足以下条件的所有列数据:

  • consecutive列的数值构成至少14分钟的连续序列(即必须包含1、2……14的连续值,更长的序列如1到20也符合要求)
  • 该连续序列对应的ID与DATE必须保持一致
原始数据
ID    DATE            TIME        start end consecutive
123 1/5/2016 0:00   1/5/2016 7:20   7   20  1
123 1/5/2016 0:00   1/5/2016 7:21   7   21  2
123 1/5/2016 0:00   1/5/2016 7:23   7   23  1
123 1/5/2016 0:00   1/5/2016 7:24   7   24  2
123 1/5/2016 0:00   1/5/2016 7:25   7   25  3
123 1/5/2016 0:00   1/5/2016 7:26   7   26  4
123 1/5/2016 0:00   1/5/2016 7:27   7   27  5
123 1/5/2016 0:00   1/5/2016 7:29   7   29  1
123 1/5/2016 0:00   1/5/2016 7:30   7   30  2
123 1/5/2016 0:00   1/5/2016 7:31   7   31  3
123 1/5/2016 0:00   1/5/2016 7:32   7   32  4
123 1/5/2016 0:00   1/5/2016 7:33   7   33  5
123 1/5/2016 0:00   1/5/2016 7:34   7   34  6
123 1/5/2016 0:00   1/5/2016 7:35   7   35  7
123 1/5/2016 0:00   1/5/2016 7:36   7   36  8
123 1/5/2016 0:00   1/5/2016 7:37   7   37  9
123 1/5/2016 0:00   1/5/2016 7:38   7   38  10
123 1/5/2016 0:00   1/5/2016 7:39   7   39  11
123 1/5/2016 0:00   1/5/2016 7:40   7   40  12
123 1/5/2016 0:00   1/5/2016 7:41   7   41  13
123 1/5/2016 0:00   1/5/2016 7:42   7   42  14
456 8/15/2015 0:00  8/15/2015 9:52  9   52  1
456 8/15/2015 0:00  8/15/2015 9:56  9   56  3
456 8/15/2015 0:00  8/15/2015 10:10 15  17  1
456 5/21/2015 0:00  5/21/2015 15:18 15  18  2
456 5/21/2015 0:00  5/21/2015 15:34 15  34  1
456 5/21/2015 0:00  5/21/2015 15:35 15  35  2
456 5/21/2015 0:00  5/21/2015 15:36 15  36  3
456 5/21/2015 0:00  5/21/2015 15:37 15  37  4
456 5/21/2015 0:00  5/21/2015 15:38 15  38  5
456 5/21/2015 0:00  5/21/2015 15:39 15  39  6
456 5/21/2015 0:00  5/21/2015 15:40 15  40  7
456 5/21/2015 0:00  5/21/2015 15:41 15  41  8
456 5/21/2015 0:00  5/21/2015 15:42 15  42  9
456 5/21/2015 0:00  5/21/2015 15:43 15  43  10
456 5/21/2015 0:00  5/21/2015 15:44 15  44  11
456 5/21/2015 0:00  5/21/2015 15:45 15  45  12
456 5/21/2015 0:00  5/21/2015 15:46 15  46  13
456 5/21/2015 0:00  5/21/2015 15:47 15  47  14
456 5/21/2015 0:00  5/21/2015 15:48 15  48  15
456 5/21/2015 0:00  5/21/2015 15:49 15  49  16
456 5/21/2015 0:00  5/21/2015 15:50 15  50  17
456 5/21/2015 0:00  5/21/2015 15:51 15  51  18
456 5/21/2015 0:00  5/21/2015 15:52 15  52  19
456 5/21/2015 0:00  5/21/2015 15:53 15  53  20
期望输出
ID    DATE                TIME   start  end consecutive
123 1/5/2016 0:00   1/5/2016 7:29   7   29  1
123 1/5/2016 0:00   1/5/2016 7:30   7   30  2
123 1/5/2016 0:00   1/5/2016 7:31   7   31  3
123 1/5/2016 0:00   1/5/2016 7:32   7   32  4
123 1/5/2016 0:00   1/5/2016 7:33   7   33  5
123 1/5/2016 0:00   1/5/2016 7:34   7   34  6
123 1/5/2016 0:00   1/5/2016 7:35   7   35  7
123 1/5/2016 0:00   1/5/2016 7:36   7   36  8
123 1/5/2016 0:00   1/5/2016 7:37   7   37  9
123 1/5/2016 0:00   1/5/2016 7:38   7   38  10
123 1/5/2016 0:00   1/5/2016 7:39   7   39  11
123 1/5/2016 0:00   1/5/2016 7:40   7   40  12
123 1/5/2016 0:00   1/5/2016 7:41   7   41  13
123 1/5/2016 0:00   1/5/2016 7:42   7   42  14
456 5/21/2015 0:00  5/21/2015 15:34 15  34  1
456 5/21/2015 0:00  5/21/2015 15:35 15  35  2
456 5/21/2015 0:00  5/21/2015 15:36 15  36  3
456 5/21/2015 0:00  5/21/2015 15:37 15  37  4
456 5/21/2015 0:00  5/21/2015 15:38 15  38  5
456 5/21/2015 0:00  5/21/2015 15:39 15  39  6
456 5/21/2015 0:00  5/21/2015 15:40 15  40  7
456 5/21/2015 0:00  5/21/2015 15:41 15  41  8
456 5/21/2015 0:00  5/21/2015 15:42 15  42  9
456 5/21/2015 0:00  5/21/2015 15:43 15  43  10
456 5/21/2015 0:00  5/21/2015 15:44 15  44  11
456 5/21/2015 0:00  5/21/2015 15:45 15  45  12
456 5/21/2015 0:00  5/21/2015 15:46 15  46  13
456 5/21/2015 0:00  5/21/2015 15:47 15  47  14
456 5/21/2015 0:00  5/21/2015 15:48 15  48  15
456 5/21/2015 0:00  5/21/2015 15:49 15  49  16
456 5/21/2015 0:00  5/21/2015 15:50 15  50  17
456 5/21/2015 0:00  5/21/2015 15:51 15  51  18
456 5/21/2015 0:00  5/21/2015 15:52 15  52  19
456 5/21/2015 0:00  5/21/2015 15:53 15  53  20
解决方案(Python Pandas)

以下代码可实现需求:

import pandas as pd

# 读取数据(替换为你的数据路径或加载方式)
# df = pd.read_csv("your_data.csv", sep="\s+")

# 标记每个连续序列组
df['group_id'] = (df['consecutive'] != df['consecutive'].shift(1) + 1).cumsum()

# 按ID、DATE、序列组分组,筛选包含1-14连续值的组
valid_groups = df.groupby(['ID', 'DATE', 'group_id']).filter(
    lambda x: set(range(1,15)).issubset(set(x['consecutive']))
)

# 移除临时列并输出结果
result = valid_groups.drop('group_id', axis=1)
print(result.to_string(index=False))

代码说明

  1. 序列分组标记:通过对比当前行与前一行的consecutive值,判断是否为新的连续序列,生成group_id标记每个独立序列
  2. 筛选有效序列:对每个ID-DATE-序列组的子数据集,检查是否包含1到14的所有数值,保留符合条件的组
  3. 输出结果:删除临时的group_id列,输出符合要求的完整数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:45:44