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

如何避免DataFrame.resample移除小时信息,提取每日价格最小值并保留时段

按天提取小时级数据集的最小值并保留小时信息

问题描述

处理小时级价格数据集时,需要按天提取各价格列的最小值,同时保留datetime中的小时信息(后续需为每个小时添加其他信息再合并)。

原始数据示例:

Price_REG1  Price_REG2  ...  Price_24_3  Price_24_4
date                                         ...                        
2020-01-01 00:00:00       30.83       30.83  ...         NaN         NaN
2020-01-01 01:00:00       28.78       28.78  ...         NaN         NaN
2020-01-01 02:00:00       28.45       28.45  ...       30.83       30.83
2020-01-01 03:00:00       27.90       27.90  ...       28.78       28.78
2020-01-01 04:00:00       27.52       27.52  ...       28.45       28.45

使用以下代码提取最小值:

df_min_1 = df_hour_1[['Price_REG1', 'Price_REG2', 'Price_REG3', 
                 'Price_REG4']].between_time('00:00', '23:00').resample('d').min()

得到的结果(丢失小时信息):

Price_REG1  Price_REG2  Price_REG3  Price_REG4
date                                                      
2020-01-01       25.07       25.07       25.07       25.07
2020-01-02       12.07       12.07       12.07       12.07
2020-01-03        0.14        0.14        0.14        0.14
2020-01-04        3.83        3.83        3.83        3.83
2020-01-05       25.77       25.77       25.77       25.77

期望结果(保留指定小时,示例为01:00):

Price_REG1  Price_REG2  Price_REG3  Price_REG4
date                                                      
2020-01-01 01:00:00       25.07       25.07       25.07       25.07
2020-01-02 01:00:00       12.07       12.07       12.07       12.07
2020-01-03 01:00:00        0.14        0.14        0.14        0.14
2020-01-04 01:00:00        3.83        3.83        3.83        3.83
2020-01-05 01:00:00       25.77       25.77       25.77       25.77

解决方案

方法1:resample后修改索引

先通过resample计算日最小值,再将索引的时间部分替换为目标小时(比如01:00):

import pandas as pd

# 计算日最小值
df_min = df_hour_1[['Price_REG1', 'Price_REG2', 'Price_REG3', 'Price_REG4']].resample('d').min()
# 修改索引,添加目标小时
df_min.index = df_min.index + pd.Timedelta(hours=1)

方法2:按日期分组计算,再匹配原时间的小时

先提取日期部分分组计算最小值,然后与原数据中对应小时的时间戳合并:

# 按日期分组计算日最小值
daily_min = df_hour_1.groupby(df_hour_1.index.date)[['Price_REG1', 'Price_REG2', 'Price_REG3', 'Price_REG4']].min()
# 获取原数据中每天目标小时的时间戳(这里取每天01:00的记录)
target_timestamps = df_hour_1.between_time('01:00', '01:00').index
# 将daily_min的索引替换为目标时间戳
daily_min.index = target_timestamps
df_min = daily_min

方法3:使用assign创建日期列后分组

先新增日期列,分组计算最小值后,再将日期与目标小时组合成新的datetime索引:

# 新增日期列
df_hour_1['date_only'] = df_hour_1.index.date
# 按日期分组计算最小值
daily_min = df_hour_1.groupby('date_only')[['Price_REG1', 'Price_REG2', 'Price_REG3', 'Price_REG4']].min()
# 组合日期与目标小时为datetime索引
daily_min.index = pd.to_datetime(daily_min.index.astype(str) + ' 01:00:00')
df_min = daily_min

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:41:17