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

Pandas处理GHCN气象数据:按站点日期分组将观测项转为列字段

Pandas长表转宽表高效实现方案

标准原生实现

你需要的长表转宽表操作属于pandas内置支持的典型场景,直接使用pivot方法即可完成,全程是向量化的C级实现,效率远高于手动编写Python循环,代码如下:

import pandas as pd

# 长表转宽表核心逻辑
wide_df = df.pivot(
    index=['station', 'date'],  # 作为行标识的列
    columns='measurement',      # 要展开为列的字段
    values='value'              # 填充到新列的数值字段
).reset_index()

# 可选:清除列名的冗余前缀
wide_df.columns.name = None

该方案完全符合pandas语法规范,相同硬件下处理速度是你现有循环方案的百倍以上,适合绝大多数中小规模数据集场景。

重复记录兼容方案

如果你的数据中存在同一个站点、同一个日期、同一个观测指标有多条记录的情况,直接使用pivot会报错,此时可以改用pivot_table指定聚合规则处理冲突:

wide_df = df.pivot_table(
    index=['station', 'date'],
    columns='measurement',
    values='value',
    aggfunc='first'  # 可按需替换为mean、sum、max等聚合函数
).reset_index()

wide_df.columns.name = None

多核心并行处理方案

如果你的GHCN数据量极大(超过内存容量/单线程处理耗时过久),可以使用Dask框架实现并行处理,它的API和pandas高度兼容,会自动拆分任务到多CPU核心运行,还支持外存计算无需把全量数据加载到内存:

import dask.dataframe as dd

# 直接用Dask读取原始CSV文件,无需提前加载为pandas DataFrame
dask_df = dd.read_csv(
    '你的GHCN数据文件路径.csv',
    dtype={'station': str, 'date': int, 'measurement': str, 'value': float}
)

# 转换逻辑和pandas完全一致
wide_dask = dask_df.pivot_table(
    index=['station', 'date'],
    columns='measurement',
    values='value',
    aggfunc='first'
).reset_index()

# 执行计算得到pandas DataFrame(如果数据量过大也可以直接写入文件,无需加载到内存)
wide_df = wide_dask.compute()
# 直接写入文件的写法:wide_dask.to_csv('输出目录路径/*.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:15:04