求助:按24小时周期提取Load最大值及对应时间(代码异常)
修正每日峰值负荷提取代码的方法
原代码的问题分析
- 定位峰值行错误:
df3.loc[max_Load.index * 24]这一步逻辑错误,max_Load.index是分组后的组序号(0、1、2...对应每一天),乘以24得到的是每天第0小时的索引,而非峰值负荷所在的实际小时索引。max_Load.values才是原DataFrame中每日Load最大值对应的行索引,应该用这个值来定位数据。 - 语法错误:
max_df['max_Load'] = max_Load.valuesmax_df末尾多了max_df,属于无效语法,且逻辑上无需重复赋值——直接提取峰值行即可获取Load最大值。
修正后的代码(假设索引为连续小时数)
如果你的df3索引是从0开始的连续小时数(每一行对应1小时),可以用以下代码:
# 按24小时分组,获取每日Load最大值对应的原索引(小时数) max_load_indices = df3.groupby(df3.index // 24)['Load'].idxmax() # 提取峰值所在的完整行数据,包含对应时间、温度、Load等信息 max_df = df3.loc[max_load_indices].reset_index(drop=False) # 可选:将原索引转为“当日小时数”列,方便直观查看 max_df['hour_of_day'] = max_df.index % 24 # 可选:重命名Load列为max_Load,明确标识峰值 max_df = max_df.rename(columns={'Load': 'max_Load'})
进阶优化(如果索引是时间戳类型)
如果你的DataFrame索引是datetime类型(而非纯数字小时数),分组逻辑可以更精准:
# 按日期分组,获取每日Load最大值对应的时间戳索引 max_load_indices = df3.groupby(df3.index.date)['Load'].idxmax() # 提取峰值行数据 max_df = df3.loc[max_load_indices].reset_index(drop=False) # 直接提取当日小时数 max_df['hour_of_day'] = max_df.index.hour
内容的提问来源于stack exchange,提问作者Karla Gonzalez
相关产品推荐
相关产品推荐

