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

Pandas按Pass_ID分组并筛选特定时段的唯一Pass_ID

解决方案

可以通过以下简洁步骤实现需求:

步骤1:定义目标时间范围

先创建时间对象来表示10:00和13:00的边界:

import pandas as pd

# 假设你的DataFrame名为df,且Date_Time已转为datetime类型
start_time = pd.Timestamp("10:00:00").time()
end_time = pd.Timestamp("13:00:00").time()

步骤2:标记符合时段的记录

为每条记录添加一个布尔列,标记其时间是否在目标范围内:

df['in_window'] = df['Date_Time'].dt.time.between(start_time, end_time)

步骤3:分组筛选仅全时段符合的Pass_ID

按Pass_ID分组,检查组内所有记录的in_window是否都为True,然后提取符合条件的ID:

valid_pass_ids = df.groupby('Pass_ID')['in_window'].all()
valid_pass_ids = valid_pass_ids[valid_pass_ids].index.tolist()

完整代码示例

import pandas as pd

# 构造示例数据(模拟你的数据集)
data = {
    'Date_Time': [
        '3/30/23 05:12:36.36', '3/30/23 05:12:38.38', '3/30/23 05:12:40.40',
        '3/30/23 05:12:42.42', '3/30/23 05:12:44.44', '3/30/23 12:12:50.50',
        '3/30/23 12:12:52.52', '3/30/23 12:12:54.54', '3/30/23 12:12:56.56',
        '3/30/23 12:12:58.58', '3/30/23 12:13:00.00', '3/30/23 12:13:02.02',
        '3/31/23 20:02:02.02', '3/31/23 20:02:05.05'
    ],
    'Pass_ID': ['A']*5 + ['B']*7 + ['C']*2,
    'El': [1,2,3,4,4,3,4,5,6,7,8,9,3,4]
}

df = pd.DataFrame(data)
df['Date_Time'] = pd.to_datetime(df['Date_Time'])

# 定义时间范围
start_time = pd.Timestamp("10:00:00").time()
end_time = pd.Timestamp("13:00:00").time()

# 标记符合时段的记录
df['in_window'] = df['Date_Time'].dt.time.between(start_time, end_time)

# 筛选仅全时段符合的Pass_ID
valid_pass_ids = df.groupby('Pass_ID')['in_window'].all()[lambda x: x].index.tolist()

print("符合条件的Pass_ID:", valid_pass_ids)
# 输出:符合条件的Pass_ID: ['B']

说明

  • 用dt.time提取时间部分,避免日期干扰,只关注一天中的时段
  • groupby('Pass_ID')['in_window'].all()返回每个Pass_ID对应的布尔值,表示该ID的所有记录是否都在目标时段内
  • 最后通过索引筛选出布尔值为True的Pass_ID,得到所需结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:30:17