如何将日期索引的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
相关产品推荐
相关产品推荐

