如何对含30年日数据的DataFrame按年中日分组计算变量均值?
按年中日期分组计算多年日均值
方法1:基于已有的Month和Day列分组
你已经拆分出了Month和Day列,这两列的组合恰好对应年中的唯一日期,直接用它们作为分组键即可:
# 对所有数值列按[Month, Day]分组并计算均值 daily_mean = df.groupby(['Month', 'Day']).mean() # 若只需计算特定变量(例如'temperature'和'rainfall')的均值 daily_mean = df.groupby(['Month', 'Day'])[['temperature', 'rainfall']].mean()
分组后的结果默认是Month和Day组成的多级索引,如需转为普通列,可执行:
daily_mean = daily_mean.reset_index()
方法2:直接处理原始YYYYMMDD列(更严谨)
虽然已拆分年月列,但直接转换原始日期列能避免拆分时的格式错误,步骤如下:
# 将int类型的YYYYMMDD转为datetime格式 df['date'] = pd.to_datetime(df['YYYYMMDD'], format='%Y%m%d') # 提取不含年份的月日字符串(如'01-01')作为分组标识 df['month_day'] = df['date'].dt.strftime('%m-%d') # 按month_day分组计算均值 daily_mean = df.groupby('month_day').mean() # 重置索引转为普通结构 daily_mean = daily_mean.reset_index()
也可以用一年中的第几天(1-366)作为分组键,适合无需直观月日显示的场景:
df['day_of_year'] = df['date'].dt.dayofyear daily_mean = df.groupby('day_of_year').mean()
关键提示
- 若数据包含闰年2月29日,该日期的均值仅基于闰年的观测记录,符合统计逻辑;
- 确保待计算均值的列为数值类型(int/float),非数值列会被自动排除(指定特定列时不受影响);
- 多级索引或
%m-%d格式的分组键都便于后续按日期筛选和可视化。
内容的提问来源于stack exchange,提问作者lavender
相关产品推荐
相关产品推荐

