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

如何按时间范围筛选DataFrame子集?按ID最小时间加1小时筛选

实现按id筛选最小时间后1小时内数据的方法

我来帮你搞定这个Pandas数据筛选的需求!核心思路就是按id分组,找到每个组的最早时间,然后筛选出该组中时间在最早时间之后1小时内的所有行。下面给你三种实用的实现方法:

方法一:分组计算+合并筛选(逻辑清晰易理解)

这种方法步骤明确,适合刚接触Pandas的同学,每一步都能看到中间结果:

import pandas as pd

# 构造示例输入DataFrame
df = pd.DataFrame({
    'id': [1,1,1,2,2,2,3,3,3,3],
    'time': [1468696537,1468696637,1482007490,1471902849,1471902850,1483361074,1474207754,1474207744,1471446673,1471446693]
})

# 1. 按id分组,计算每个id的最小时间
min_time_per_id = df.groupby('id')['time'].min().reset_index(name='min_time')

# 2. 将每个id的最小时间合并回原数据
df_with_min = df.merge(min_time_per_id, on='id')

# 3. 筛选时间在[最小时间, 最小时间+3600秒]范围内的行
result = df_with_min[(df_with_min['time'] >= df_with_min['min_time']) & 
                     (df_with_min['time'] <= df_with_min['min_time'] + 3600)]

# 4. 保留需要的列并输出
result = result[['id', 'time']]
print(result)

方法二:使用transform函数(代码更紧凑)

transform函数可以直接将分组计算的结果广播到每一行,省去合并步骤,代码更简洁:

import pandas as pd

df = pd.DataFrame({
    'id': [1,1,1,2,2,2,3,3,3,3],
    'time': [1468696537,1468696637,1482007490,1471902849,1471902850,1483361074,1474207754,1474207744,1471446673,1471446693]
})

# 给每行添加对应id的最小时间
df['min_time'] = df.groupby('id')['time'].transform('min')

# 筛选范围并清理列
result = df[(df['time'] >= df['min_time']) & 
            (df['time'] <= df['min_time'] + 3600)][['id', 'time']]
print(result)

方法三:分组apply自定义函数(适合扩展复杂逻辑)

如果后续需要调整筛选规则,这种方法把分组筛选逻辑封装成函数,可读性和扩展性都很好:

import pandas as pd

df = pd.DataFrame({
    'id': [1,1,1,2,2,2,3,3,3,3],
    'time': [1468696537,1468696637,1482007490,1471902849,1471902850,1483361074,1474207754,1474207744,1471446673,1471446693]
})

# 定义分组筛选函数
def filter_within_hour(group):
    earliest_time = group['time'].min()
    # 筛选时间在最早时间到最早时间+1小时内的行
    return group[(group['time'] >= earliest_time) & 
                 (group['time'] <= earliest_time + 3600)]

# 分组应用函数并重置索引
result = df.groupby('id').apply(filter_within_hour).reset_index(drop=True)
print(result)

输出结果

三种方法都会得到你期望的子集:

id        time
0   1  1468696537
1   1  1468696637
2   2  1471902849
3   2  1471902850
4   3  1471446673
5   3  1471446693

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:29