获取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
相关产品推荐
相关产品推荐

