如何对不同年份的月份重分组并计算跨年月度均值?
解决跨年份计算各月份平均值的方案
首先确保你的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
相关产品推荐
相关产品推荐

