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

如何移除DataFrame中首小时非0的对应完整日期数据?

处理Datetime索引DataFrame的日期过滤需求

你原来的代码有两个关键问题:

  1. 判断条件错误:应该检查小时是否为0,而非day !=0(day是日期的日份,比如1号、2号,永远不会是0)
  2. 删除范围错误:df.drop(first_data)只能删掉指定的单条记录,无法删除整个日期的所有数据

正确的做法是先找出所有「当天首个记录不是0点」的日期,再批量删除这些日期的全部数据,代码如下:

# 1. 按日期分组,获取每个日期最早记录的小时数
daily_first_hour = df.index.groupby(df.index.date).min().hour

# 2. 筛选出需要删除的日期:最早小时≠0的日期
dates_to_drop = daily_first_hour[daily_first_hour != 0].index

# 3. 保留不属于这些日期的所有数据(等价于删除目标日期数据)
df = df[~df.index.date.isin(dates_to_drop)]

如果一定要用df.drop()实现,也可以这样写:

# 获取所有需要删除的行的索引
rows_to_drop = df[df.index.date.isin(dates_to_drop)].index
# 批量删除这些行
df = df.drop(rows_to_drop)

关键逻辑说明

  • df.index.date会把Datetime索引转换成纯日期对象(比如2017-01-01),方便按天分组处理
  • groupby(df.index.date).min()能拿到每个日期的第一条记录的时间,再取.hour就知道当天第一条是几点
  • 用isin匹配需要删除的日期,取反符号~用来保留符合要求的行(当天第一条是0点的日期)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:48:35