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

如何对不同年份的月份重分组并计算跨年月度均值?

解决跨年份计算各月份平均值的方案

首先确保你的Date列是datetime格式,先做转换:

import pandas as pd
df['Date'] = pd.to_datetime(df['Date'])

下面两种方法都能实现你要的跨年份月份均值计算:

方法一:直接按月份名称分组

提取日期的月份名称作为分组依据,计算Value列的平均值:

monthly_avg = df.groupby(df['Date'].dt.month_name())['Value'].mean().reset_index()
monthly_avg.columns = ['Month', 'Avg']

运行后就能得到每个月份(January、February...)对应跨所有年份的平均值,和你期望的输出格式一致。

方法二:按月份数字分组后替换名称(保证月份顺序)

如果希望结果严格按1-12月的顺序排列,可以先按月份数字分组,再把数字映射成对应月份名称:

# 按月份数字分组计算均值
monthly_avg = df.groupby(df['Date'].dt.month)['Value'].mean().reset_index()
# 定义月份数字到名称的映射
month_map = {
    1: 'January', 2: 'February', 3: 'March', 4: 'April',
    5: 'May', 6: 'June', 7: 'July', 8: 'August',
    9: 'September', 10: 'October', 11: 'November', 12: 'December'
}
# 替换成月份名称并调整列格式
monthly_avg['Month'] = monthly_avg['Date'].map(month_map)
monthly_avg = monthly_avg[['Month', 'Value']].rename(columns={'Value': 'Avg'})

为什么之前的方法不生效?

  • df.resample("M").mean()是按每个具体日历月(比如2011年1月、2011年2月)重采样计算,结果自然会带年份,和你的跨年份求均值需求不符。
  • 你之前用groupby没成功,大概率是没选对分组依据——需要提取日期的month_name()或month属性,而非直接对Date列分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:58