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

如何在Pandas中仅保留各小时最接近整点的行并删除其余行?

当然可以用Pandas搞定这个需求!我来一步步给你拆解实现步骤:

第一步:确保时间索引是datetime类型

首先得保证你的Date索引是Pandas的datetime格式——毕竟要做时间相关的分组和计算,格式不对会出问题。如果还没转换的话,先做这一步:

# 如果Date列还没设为索引,先设置
df = df.set_index('Date')
# 转换为datetime类型(如果原始数据是字符串格式的话)
df.index = pd.to_datetime(df.index)

第二步:按小时分组,筛选最接近整点的行

核心思路是:把数据按小时段分组(比如15:00-15:59为一组),然后在每个组里找出时间戳最接近该小时整点的那一行。

代码实现如下:

import pandas as pd

# 定义一个辅助函数,处理单个小时组的筛选
def pick_closest_to_hour(group):
    # 计算每行时间到当前小时整点的时间差绝对值
    # group.index.floor('H') 会得到该组对应的整点时间(比如15:16:12对应15:00:00)
    time_diff = (group.index - group.index.floor('H')).abs()
    # 返回时间差最小的那一行
    return group.loc[time_diff.idxmin()]

# 按小时分组,应用筛选函数
result_df = df.groupby(pd.Grouper(freq='H')).apply(pick_closest_to_hour)
# 可选:移除分组产生的额外索引,让结果和原数据结构一致
result_df = result_df.reset_index(level=0, drop=True)

特殊情况:如果你需要保留每个小时段的最早行

看你例子里提到“删除该时段内所有时间戳晚于该行的其他行”,如果你的实际需求是保留每个小时里最早出现的那一行(而不是严格最接近整点),那代码可以更简洁:

# 按小时分组,直接取每个组的第一行
result_df = df.groupby(pd.Grouper(freq='H')).first()

验证结果

运行完上面的代码后,你可以打印result_df检查——每个小时只会保留一行,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:15:32