如何在Pandas中自定义季节区间(指定起始月)计算数据均值?
自定义季节均值计算方案
问题1:指定季节起始月份解决resample分组问题
直接用resample的origin参数指定季节起始点,结合'3M'频率,就能让分组从2013年12月开始,完美匹配你需要的12-2月、3-5月等区间:
# 设置origin为数据起始的12月,确保分组从该月开始 seasonal_mean = df.resample('3M', origin='2013-12-01').mean()
如果想让结果的标签显示每个季节区间的最后一个月(比如12-2月的标签显示为2月),可以加上label='right'参数:
seasonal_mean = df.resample('3M', origin='2013-12-01', label='right').mean()
问题2:预定义季节分组计算均值
可以先给每条数据标记所属季节,再通过groupby计算均值,灵活性更强:
- 编写月份到自定义季节的映射规则,新增季节列:
# 定义月份对应的季节 def get_season(month): if month in [12, 1, 2]: return '冬季(12-2月)' elif month in [3, 4, 5]: return '春季(3-5月)' elif month in [6, 7, 8]: return '夏季(6-8月)' elif month in [9, 10, 11]: return '秋季(9-11月)' # 给数据添加季节标签 df['季节'] = df.index.month.apply(get_season) # 按季节分组计算均值 seasonal_mean = df.groupby('季节').mean()
如果需要区分不同年份的同季节(比如2013-2014冬季、2014-2015冬季),可以把年份和季节结合:
def get_year_season(date): month = date.month year = date.year # 12月归属到下一年的冬季,1-2月归属到当前年冬季,其余月份归属当前年对应季节 season_year = year + 1 if month == 12 else year season = get_season(month) return f"{season_year}年{season}" df['年度季节'] = df.index.map(get_year_season) seasonal_mean = df.groupby('年度季节').mean()
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

