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

如何将日期索引的DataFrame按年份分组并计算各列均值?

问题:按年份聚合日期索引的DataFrame并计算列均值

我有一个索引为日期格式的DataFrame,包含tavg、tmin、tmax、prcp列,想要将其转换为按年份聚合的形式,每列对应该年份所有数据的均值。

原始DataFrame结构:

tavg   tmin    tmax    prcp
year                
1990-01-01  9.4     6.0     15.1    0.0
1990-01-02  17.9    7.3     24.3    0.0
1990-01-03  14.9    8.3     22.1    0.0
1990-01-04  20.9    14.6    28.2    0.0
1990-01-05  29.8    25.0    36.0    0.3   

期望输出:

tavg    tmin    tmax    prcp
year                
1990    9.2     5.0     15.1    0.0
1991    16.4    6.3     24.3    0.0
1992    12.3    8.3     22.1    0.0
1993    21.7    14.6    28.2    0.0
1994    28.6    25.0    36.0    0.3

解决方案

方法1:使用resample()(时间序列专用方法)

resample()是Pandas针对时间序列设计的周期聚合工具,操作简洁直观:

import pandas as pd

# 确保索引为datetime格式(若原始索引是字符串需执行此步)
df.index = pd.to_datetime(df.index)

# 按年份('Y')聚合,计算每列均值
yearly_avg = df.resample('Y').mean()

# 将索引转换为年份整数,匹配期望输出格式
yearly_avg.index = yearly_avg.index.year

方法2:使用groupby()按年份分组

通过提取索引的年份值进行分组,灵活性更强,适合复杂场景:

import pandas as pd

# 确保索引为datetime格式
df.index = pd.to_datetime(df.index)

# 按索引的年份分组,计算各列年度均值
yearly_avg = df.groupby(df.index.year).mean()

注意事项

  • 若原始DataFrame的索引是字符串类型(如"1990-01-01"),必须先通过pd.to_datetime()转换为datetime格式,否则无法按年份聚合。
  • 两种方法最终都会得到以年份为索引、各列对应年度均值的DataFrame,与期望输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:01:06