如何逐格点计算格点年时间序列数据集的30年分段平均值
格点数据指定时段均值批量计算方案
使用Python+pandas实现,无需手动遍历格点,可一次性完成全量格点的分段统计,代码可直接复用。
1. 数据读取与预处理
首先加载CSV数据,转换时间字段格式,提取年份用于后续分段匹配:
import pandas as pd # 替换为你的本地CSV文件路径 df = pd.read_csv("your_grid_data.csv") # 转换时间列为标准日期格式,提取年份 df["time"] = pd.to_datetime(df["time"]) df["year"] = df["time"].dt.year
2. 自定义时段分段规则
按照需求定义需要统计的时间区间,给每条数据匹配所属时段:
# 分段格式:(起始年份, 结束年份, 时段名称),可根据需求自行增删调整 period_config = [ (1950, 1969, "1950-1969"), (1970, 2005, "1970-2005"), (2006, 2039, "2006-2039"), (2049, 2069, "2049-2069"), (2070, 2100, "2070-2100") ] # 为每条记录匹配对应时段 def get_period(year_val): for s, e, p_name in period_config: if s <= year_val <= e: return p_name return pd.NA df["period"] = df["year"].apply(get_period) # 过滤掉不在指定统计时段内的记录 df = df.dropna(subset=["period"])
3. 批量计算所有格点的分段均值
按经纬度(唯一标识格点)+ 时段分组,对三类指标直接求均值,自动覆盖全部格点:
# 注意:如果你的指标列名不是value1/value2/value3,替换为文件内实际列名即可 stat_result = df.groupby( by=["lon", "lat", "period"], as_index=False )[["value1", "value2", "value3"]].mean()
4. 结果导出
提供两种常用的结果格式,按需选择即可:
# 长表格式:每行对应1个格点1个时段的均值,适合后续统计分析 stat_result.to_csv("grid_period_mean_long.csv", index=False, encoding="utf-8-sig") # 宽表格式:每行对应1个格点,不同时段指标作为单独列,适合直接查阅 pivot_result = stat_result.pivot_table( index=["lon", "lat"], columns="period", values=["value1", "value2", "value3"] ) # 重置列名 pivot_result.columns = [f"{metric}_{p}" for metric, p in pivot_result.columns] pivot_result = pivot_result.reset_index() pivot_result.to_csv("grid_period_mean_wide.csv", index=False, encoding="utf-8-sig")
补充说明:如果你的数据量超过百万行、内存不足,可以将
pandas替换为dask.dataframe,两者API完全一致,不需要修改业务逻辑即可处理超大数据集。
内容的提问来源于stack exchange,提问作者TAD
相关产品推荐
相关产品推荐

