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

自定义季节重采样时间序列DataFrame并计算聚合均值

自定义季节划分的时间序列年度均值计算问题

数据集背景

我正在处理一个大型时间序列数据集,生成代码如下:

import pandas as pd
import numpy as np
import random
import seaborn as sns

df = pd.DataFrame({'date':pd.date_range('1990',end = '1994',freq='3H'),
                  'A': np.random.randint(low = 0,high=100,size=11689),
                  'B': np.random.randint(low = 10,high=45,size=11689) })
df['date'] = pd.to_datetime(df.date.astype(str), format='%Y/%m/%d %H:%M',errors ='coerce') 
df.index = pd.DatetimeIndex(df.date)
df.drop('date', axis = 1, inplace = True)

需求说明

需要按照自定义季节划分筛选数据并计算年度均值,季节划分如下:

  • 冬季:12月、1月、2月(跨年度,如1990年12月到1991年2月属于1990/1991冬季)
  • 预季风季:3月、4月、5月
  • 季风季:6月、7月、8月、9月
  • 后季风季:10月、11月

我尝试过用resample('Q-NOV')但它只支持固定季度,不符合自定义需求,目前完成了部分筛选:

# 冬季数据筛选
winterStart = '-12'
winterEnd   = '-02'

df_winter = pd.concat([df.loc[str(year) + winterStart : str(year+1) + winterEnd].mean() for year in range(1990, 1994)]) # DJF
# 冬季跨年度,所以用当年12月到下一年2月

# 预季风季数据筛选
df_preMonsoon = df[df.index.month.isin([3,4,5])] # MAM

问题

需要计算数据周期内每年每个季节中参数A和B的季节平均值,请求帮助。


解决方案

步骤1:定义季节映射与年度归属规则

先为每个月份分配对应的季节,同时处理冬季的跨年度问题:将12月归属到下一年度的冬季(比如1990年12月属于1991年度的冬季),统一按年度分组计算。

# 定义月份到季节的映射
season_mapping = {
    1: '冬季', 2: '冬季',
    3: '预季风季', 4: '预季风季', 5: '预季风季',
    6: '季风季', 7: '季风季', 8: '季风季', 9: '季风季',
    10: '后季风季', 11: '后季风季',
    12: '冬季'  # 12月归到下一年的冬季
}

# 创建年份和季节列
df['year'] = df.index.year
df['month'] = df.index.month
# 处理冬季的年度归属:12月的年份加1
df.loc[df['month'] == 12, 'year'] += 1
# 映射季节
df['season'] = df['month'].map(season_mapping)

步骤2:分组计算年度季节均值

使用groupby按year和season分组,直接计算A和B的均值:

# 计算年度季节均值
seasonal_yearly_mean = df.groupby(['year', 'season'])[['A', 'B']].mean().reset_index()

# 按自定义季节顺序排序,让结果更直观
season_order = ['冬季', '预季风季', '季风季', '后季风季']
seasonal_yearly_mean['season'] = pd.Categorical(seasonal_yearly_mean['season'], categories=season_order, ordered=True)
seasonal_yearly_mean = seasonal_yearly_mean.sort_values(['year', 'season'])

步骤3:查看结果

打印或查看最终结果:

print(seasonal_yearly_mean)

结果说明

最终的seasonal_yearly_mean会包含每一年每个季节的A和B的平均值,示例格式如下:

yearseasonAB
1991冬季49.234527.1234
1991预季风季50.112326.8765
............

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:32:20