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

使用pandas跨午夜分组夜间时段数据并执行统计运算的问题咨询

解决方案

你可以直接通过对时间索引做偏移计算,生成每个数据点所属的夜间时段标签再分组统计,全程不需要新增额外列到原DataFrame,一行逻辑就能适配任意长度的跨天夜间时段:

import pandas as pd
import numpy as np

def compute_nth_lmax(self, n):
    # 筛选符合夜间时段的行
    night_data = self.df["LAFmax,T"].between_time(
        self._night_start, 
        self._day_start,
        include_start=True, 
        include_end=False
    )
    # 计算每个时间点对应的夜间所属起始日期:时间戳减去夜间开始时长,跨天数据会自动归到同一个起始日期
    night_group = night_data.index - pd.Timedelta(self._night_start)
    # 按夜间起始日期分组计算第n大值
    nth_lmax = night_data.groupby(night_group.date).apply(
        lambda x: np.sort(x)[-n] if len(x) >= n else np.nan
    ).dropna()
    return nth_lmax

实现逻辑说明

  • 核心逻辑是把每个时间戳减去夜间开始的时长,跨天的夜间数据就会被归到同一个日期下:比如22:00开始的夜间,2021-08-18 22:00到2021-08-19 07:00的所有数据,减去22小时之后日期都会变成2021-08-18,刚好对应这个夜间的起始日期
  • 完全适配任意长度的夜间时段,不管是9小时、10小时还是其他无法被24整除的时长,都能正确分组
  • 不需要修改原DataFrame结构,分组标签为临时生成,性能和resample方案几乎一致

如果需要让返回结果的索引更易读,可以额外增加一行索引格式化逻辑:

# 可选:将索引转为夜间时段的字符串标识
nth_lmax.index = nth_lmax.index.strftime("%Y-%m-%d") + f" {self._night_start} 至次日 {self._day_start}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:24:02