如何在Python中将月度数据按年聚合计算年度平均值
Python按年份分组统计月度数据年度平均值实现
方法1:pandas实现(推荐,适配常规数据处理场景)
这个方案代码简洁、容错性强,处理1871-2021年的长周期时间序列不会出现日期识别错误,是数据统计场景的首选方案。
import pandas as pd # 替换为你实际的数据读取逻辑,比如pd.read_csv("你的数据集路径.csv") # 以下为基于你给出的样例构造的测试数据 df = pd.DataFrame({ "Date": ["1871-01", "1871-02", "1871-03", "1871-04", "1871-05", "1871-06", "1871-07", "1871-08", "1871-09", "1871-10", "1871-11", "1871-12"], "Value": [4.5, 10.7, 8.9, 1.3, 5.2, 6.7, 3.8, 9.1, 7.4, 2.6, 4.9, 8.2] }) # 解析「年-月」格式的日期字段 df["Date"] = pd.to_datetime(df["Date"], format="%Y-%m") # 提取年份作为分组维度 df["Year"] = df["Date"].dt.year # 按年份分组计算Value列的算术平均值 yearly_average = df.groupby("Year", as_index=False)["Value"].mean().rename(columns={"Value": "Yearly_Mean_Value"})
关键逻辑说明:
- 解析日期时显式指定
format="%Y-%m",可以避免跨世纪日期的识别偏差,适配1900年之前的早期日期 - 计算均值时pandas会自动跳过Value列的空值,如果需要排除月份不足12个的年份,可先做过滤再聚合:
# 筛选出有完整12个月记录的年份 valid_years = df.groupby("Year")["Date"].count().reset_index(name="month_count") valid_years = valid_years[valid_years["month_count"] == 12]["Year"] # 基于有效年份计算年均值 yearly_average_valid = df[df["Year"].isin(valid_years)].groupby("Year", as_index=False)["Value"].mean()
方法2:标准库实现(无第三方依赖场景使用)
如果运行环境无法安装第三方库,可以直接用Python标准库完成分组计算,不需要额外依赖:
from collections import defaultdict # 替换为你实际加载的数据集,格式为(日期字符串, 数值)的元组列表 raw_data = [ ("1871-01", 4.5), ("1871-02", 10.7), ("1871-03", 8.9), ("1871-04", 1.3), # 其余数据按格式补充 ] year_value_sum = defaultdict(float) year_month_count = defaultdict(int) for date_str, value in raw_data: # 拆分日期字符串提取年份 year = int(date_str.split("-")[0]) year_value_sum[year] += value year_month_count[year] += 1 # 计算年均值,结果按年份升序排列 yearly_average = { year: year_value_sum[year] / year_month_count[year] for year in sorted(year_value_sum.keys()) # 若需要仅保留满12个月记录的年份,取消下一行注释即可 # if year_month_count[year] == 12 }
内容的提问来源于stack exchange,提问作者dfssdfd
相关产品推荐
相关产品推荐

