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

如何逐格点计算格点年时间序列数据集的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:09:26