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

获取DataFrame中滑雪缆车队列连续序列的首次/末次出现时间

提取滑雪缆车队列的连续时间段

嘿,这个需求很容易实现!我们可以借助pandas的分组功能,识别出连续的Queue=1序列,然后提取每个序列的首尾时间点。下面是具体的步骤和代码示例:

1. 先准备示例数据(模拟你的场景)

首先我们构造一个和你描述一致的DataFrame,方便后续演示:

import pandas as pd

# 生成从08:00到15:00的每分钟时间序列
time_range = pd.date_range(start='2024-01-01 08:00', end='2024-01-01 15:00', freq='T')
df = pd.DataFrame({'Minutes': time_range, 'Queue': 0})

# 设置有队列的时间段
df.loc[(df['Minutes'] >= '2024-01-01 10:01') & (df['Minutes'] <= '2024-01-01 10:45'), 'Queue'] = 1
df.loc[(df['Minutes'] >= '2024-01-01 14:01') & (df['Minutes'] <= '2024-01-01 14:45'), 'Queue'] = 1

2. 核心步骤:标记连续队列组并提取首尾时间

关键思路是用shift()和cumsum()来给连续的Queue=1序列分配唯一的组号,然后按组聚合取首尾时间:

# 标记连续的队列组:当Queue状态变化时,组号递增
df['queue_group'] = (df['Queue'] != df['Queue'].shift(1)).cumsum()

# 筛选出有队列的记录,按组聚合得到每个队列的起止时间
queue_periods = df[df['Queue'] == 1].groupby('queue_group').agg(
    队列开始时间=('Minutes', 'first'),
    队列结束时间=('Minutes', 'last')
).reset_index(drop=True)

# 如果你的Minutes是字符串格式,先转成datetime:df['Minutes'] = pd.to_datetime(df['Minutes'])
# 可以把时间格式化为HH:MM(去掉日期部分)
queue_periods['队列开始时间'] = queue_periods['队列开始时间'].dt.strftime('%H:%M')
queue_periods['队列结束时间'] = queue_periods['队列结束时间'].dt.strftime('%H:%M')

print(queue_periods)

3. 输出结果

运行上面的代码后,你会得到如下结果:

队列开始时间 队列结束时间
0    10:01    10:45
1    14:01    14:45

这个结果正好对应你描述的两个队列时间段,完美匹配需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:02:08