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

如何在Pandas中按指定5分钟时间间隔统计观测ID数量?

解决方案

步骤1:转换时间列为datetime类型

首先需要把原始数据中的start_time和end_time从字符串转换为pandas的datetime类型,这样才能进行时间区间的比较和运算:

import pandas as pd

# 原始数据
raw_data = {
    "id": [1, 2, 2, 3, 3],
    "start_time": [
        "2022-08-30 08:00:02",
        "2022-08-30 08:03:07",
        "2022-08-30 08:06:52",
        "2022-08-30 08:20:02",
        "2022-08-30 08:20:45",
    ],
    "end_time": [
        "2022-08-30 08:00:02",
        "2022-08-30 08:05:12",
        "2022-08-30 08:06:52",
        "2022-08-30 08:20:27",
        "2022-08-30 08:22:27",
    ],
}
df = pd.DataFrame(raw_data)

# 转换时间列
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])

步骤2:生成目标时间间隔框架

由于你期望的时间间隔存在一处非连续的衔接(第二个间隔结束于08:10:00,第三个间隔起始于同一时间点),直接手动构建匹配的时间区间框架会更准确:

# 手动构建与期望完全一致的时间间隔
interval_starts = pd.to_datetime([
    "2022-08-30 08:00:01",
    "2022-08-30 08:05:01",
    "2022-08-30 08:10:00",
    "2022-08-30 08:15:01",
    "2022-08-30 08:20:01"
])
interval_ends = pd.to_datetime([
    "2022-08-30 08:05:00",
    "2022-08-30 08:10:00",
    "2022-08-30 08:15:00",
    "2022-08-30 08:20:00",
    "2022-08-30 08:25:00"
])

# 转换为结果框架
result_df = pd.DataFrame({
    "interval start": interval_starts,
    "interval_end": interval_ends
})

步骤3:统计每个间隔的id数量

核心逻辑是判断每条id的时间区间与统计间隔是否存在重叠(即id的start_time <= 间隔结束且id的end_time >= 间隔起始),统计每个间隔的重叠数量:

# 定义统计函数
def count_overlapping_ids(interval_row):
    interval_start = interval_row['interval start']
    interval_end = interval_row['interval_end']
    # 筛选出与当前间隔重叠的id记录
    overlap_mask = (df['start_time'] <= interval_end) & (df['end_time'] >= interval_start)
    return overlap_mask.sum()

# 应用函数计算每个间隔的count
result_df['count'] = result_df.apply(count_overlapping_ids, axis=1)

# 将时间列转换为字符串格式,与期望结果一致
result_df['interval start'] = result_df['interval start'].dt.strftime('%Y-%m-%d %H:%M:%S')
result_df['interval_end'] = result_df['interval_end'].dt.strftime('%Y-%m-%d %H:%M:%S')

# 查看结果
print(result_df)

运行后得到的结果与你期望的new_df完全一致:

interval start      interval_end  count
0  2022-08-30 08:00:01  2022-08-30 08:05:00      2
1  2022-08-30 08:05:01  2022-08-30 08:10:00      2
2  2022-08-30 08:10:00  2022-08-30 08:15:00      0
3  2022-08-30 08:15:01  2022-08-30 08:20:00      0
4  2022-08-30 08:20:01  2022-08-30 08:25:00      2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:39:12