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

如何用Pandas提取前一天9:30至当日9:00时段的每日Value最大值

解决方案

步骤1:处理夏令时重复记录

先对同一时间点的重复记录取最大值,确保每个时间戳唯一:

# 按时间分组取最大值,消除夏令时导致的重复记录
df = df.groupby('Local_Time_Dt')['Value'].max().reset_index()

步骤2:筛选目标时段的记录

只保留属于「前一天09:30到当日09:00」范围内的时间点,排除09:00-09:30的无效时段:

# 定义时间阈值
t_930 = pd.to_datetime('09:30').time()
t_900 = pd.to_datetime('09:00').time()

# 筛选符合条件的记录:时间>=09:30 或 <=09:00
df = df[(df['Local_Time_Dt'].dt.time >= t_930) | (df['Local_Time_Dt'].dt.time <= t_900)]

步骤3:为每个记录分配目标统计日期

根据时间点所属的周期,标记对应的目标日期(比如1999-02-21 09:30的记录属于1999-02-22的统计周期):

import numpy as np

# 提取日期和时间部分
dates = df['Local_Time_Dt'].dt.date
times = df['Local_Time_Dt'].dt.time

# 生成目标日期:时间>=09:30的归为次日,否则归为当日
df['Target_Date'] = np.where(times >= t_930,
                             dates + pd.Timedelta(days=1),
                             dates)

步骤4:分组求每日最大值并补全缺失日期

按目标日期分组取最大值,同时生成完整日期序列补全缺失的日期(缺失值填充为0):

# 按目标日期分组求最大值
daily_max = df.groupby('Target_Date')['Value'].max().reset_index()

# 生成完整的日期范围
full_dates = pd.date_range(start=daily_max['Target_Date'].min(),
                           end=daily_max['Target_Date'].max(),
                           freq='D')
full_dates_df = pd.DataFrame({'Target_Date': full_dates})

# 合并补全缺失日期,填充缺失值为0
result = pd.merge(full_dates_df, daily_max, on='Target_Date', how='left').fillna(0)

# 重命名列符合输出要求
result.rename(columns={'Target_Date': 'Local_Time_Dt'}, inplace=True)

最终的result即为所需格式,每个日期对应其统计时段内的最大值,缺失日期也会被补全并填充为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:35:16