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

如何对含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:05:59