基于2012-2023年历史数据计算每日逐小时均值构建基准年
计算跨年份每日逐小时电力均值构建基准年
问题核心
需要基于2012-2023年的小时级电力数据,计算同一月日、同一小时的跨年份平均值,生成"基准年"的逐小时数据,输出格式要求为MM-DD HH:MM:SS的时间标识对应均值。
现有代码问题分析
- 第一段代码:按
日期分组求日均值,丢失了小时维度,仅得到每日整体平均值,不符合需求。 - 第二段代码:按
日期+小时分组,本质是保留了单天单小时的原始数据(每个分组仅对应一条记录),未实现跨年份的聚合计算。
解决方案
通过提取月-日-小时作为分组键,将所有年份中同一时间点的数据归为一组,再计算均值即可。以下提供两种实现方式:
方法1:基于字符串格式的时间键分组
import pandas as pd # 确保Timestamp为datetime类型(若未转换) final_df['Timestamp'] = pd.to_datetime(final_df['Timestamp']) # 生成统一格式的月-日-小时标识作为分组键 final_df['time_key'] = final_df['Timestamp'].dt.strftime('%m-%d %H:%M:%S') # 按时间键分组,计算电力数据的均值 baseline_df = final_df.groupby('time_key')[['bruttoPower [kW]', 'nettoPower [kW]']].mean().reset_index() # 重命名列名匹配需求 baseline_df.rename(columns={'time_key': 'Timestamp'}, inplace=True) # 按时间顺序排序(确保从年初到年末排列) baseline_df['sort_key'] = pd.to_datetime(baseline_df['Timestamp'], format='%m-%d %H:%M:%S') baseline_df.sort_values('sort_key', inplace=True) baseline_df.drop('sort_key', axis=1, inplace=True) display(baseline_df)
方法2:基于日期分量(月/日/小时)分组
这种方式无需字符串处理,更适合后续可能的扩展操作:
import pandas as pd final_df['Timestamp'] = pd.to_datetime(final_df['Timestamp']) # 按月、日、小时三个维度分组,计算均值 baseline_df = final_df.groupby( [final_df['Timestamp'].dt.month, final_df['Timestamp'].dt.day, final_df['Timestamp'].dt.hour] )[['bruttoPower [kW]', 'nettoPower [kW]']].mean().reset_index() # 构造需求格式的Timestamp列 baseline_df['Timestamp'] = baseline_df.apply( lambda row: f"{row['month']:02d}-{row['day']:02d} {row['hour']:02d}:00:00", axis=1 ) # 清理冗余列并排序 baseline_df = baseline_df[['Timestamp', 'bruttoPower [kW]', 'nettoPower [kW]']] baseline_df['sort_key'] = pd.to_datetime(baseline_df['Timestamp'], format='%m-%d %H:%M:%S') baseline_df.sort_values('sort_key', inplace=True) baseline_df.drop('sort_key', axis=1, inplace=True) display(baseline_df)
输出效果
最终输出将包含8760行(闰年为8784行),每行对应一个MM-DD HH:MM:SS的时间点,以及该时间点跨12年的电力均值,完全匹配需求示例格式。
内容的提问来源于stack exchange,提问作者snkm
相关产品推荐
相关产品推荐

