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

如何基于2012-2023年时序数据计算月度平均功率构建基准年

构建月度平均基准线(参考年)的Pandas解决方案

我拥有2012年至2023年的历史数据,希望计算这些年份中每个月份的平均值,以构建“参考年”或“基准线”。我的DataFrame(final_df)结构如下:

Timestamp             bruttoPower [kW]      nettoPower [kW]     
0               2012-01-01 00:00:00   1501.500000           375.375000          
1               2012-01-01 01:00:00   1488.833333           372.208333          
2               2012-01-01 02:00:00   1626.833333           406.708333          
3               2012-01-01 03:00:00   1350.333333           337.583333          
4               2012-01-01 04:00:00   1424.000000           356.000000          
...             ...                   ...                   ...                 
105187          2023-12-31 19:00:00   3301.758391           763.500000          
105188          2023-12-31 20:00:00   2322.399977           592.500000              
105189          2023-12-31 21:00:00   3393.225006           861.000000              
105190          2023-12-31 22:00:00   3784.991643           952.000000              
105191          2023-12-31 23:00:00   3661.591654           950.500000          
105192 rows × 5 columns

尝试过的无效方法

  • 参考过同类问题的解法但未成功
  • ChatGPT给出的代码逻辑错误,它按年和月分组求和,完全不符合“计算所有年份对应月份平均值”的需求:
final_df.reset_index(inplace=True)

final_df['Year'] = final_df['Timestamp'].dt.year
final_df['Month'] = final_df['Timestamp'].dt.month

df_new = final_df.groupby(['Year', 'Month']).sum()

df_new.reset_index(inplace=True)

display(df_new)

期望输出格式

希望得到按月份排序的月度平均值,示例如下:

Month   bruttoPower [kW]   nettoPower [kW]    
0   Jan     1501.500000         375.375000          
1   Feb     1488.833333         372.208333          
2   Mar     1626.833333         406.708333          
3   Apr     1350.333333         337.583333          
4   May     1424.000000         356.000000          
... ...     ...                 ...                 
10  Nov     3393.225006         861.000000          
11  Dec     3784.991643         952.000000          

正确解决方案

方法一:直接提取月份缩写并分组求平均

如果数据中每个月份都有记录,可直接按月份缩写分组,保持首次出现的顺序:

import pandas as pd

# 确保Timestamp列为datetime类型(若尚未转换)
final_df['Timestamp'] = pd.to_datetime(final_df['Timestamp'])

# 提取月份缩写(如Jan、Feb)
final_df['Month'] = final_df['Timestamp'].dt.month_name().str[:3]

# 按月份分组计算平均值,sort=False保留原始出现顺序
reference_year = final_df.groupby('Month', sort=False)[['bruttoPower [kW]', 'nettoPower [kW]']].mean().reset_index()

# 查看结果
print(reference_year)

方法二:强制按1-12月顺序排序(更稳妥)

如果需要确保结果严格按1月到12月排序,可先按月份数字分组,再替换为月份缩写:

import pandas as pd

final_df['Timestamp'] = pd.to_datetime(final_df['Timestamp'])

# 提取月份数字
final_df['Month_num'] = final_df['Timestamp'].dt.month

# 按月份数字分组计算平均值
reference_year = final_df.groupby('Month_num')[['bruttoPower [kW]', 'nettoPower [kW]']].mean().reset_index()

# 映射月份数字到缩写
month_map = {
    1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun',
    7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'
}
reference_year['Month'] = reference_year['Month_num'].map(month_map)

# 调整列顺序
reference_year = reference_year[['Month', 'bruttoPower [kW]', 'nettoPower [kW]']]

# 查看结果
print(reference_year)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:27:05