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

如何在大型Pandas DataFrame中按年月计算海表温度月均值

解决方案:高效计算逐月SST均值

方法一:基于现有Pandas DataFrame

你已经生成了包含所有点位数据的DataFrame,直接用Pandas的groupby就能高效按年月分组计算均值,完全不需要手动循环:

# 按year和month分组,计算每个组的SST均值
monthly_sst_mean = df.groupby(['year', 'month'])['sst'].mean().reset_index()

# 可选:将year和month合并为datetime格式,方便后续绘图
monthly_sst_mean['date'] = pd.to_datetime(monthly_sst_mean[['year', 'month']].assign(day=1))

groupby是Pandas底层优化的向量化操作,处理5000多万行数据的速度远快于手动循环筛选,代码也更简洁。

方法二:直接用Xarray处理(更优)

其实你没必要把数据转成DataFrame——Xarray天生支持多维气象数据的区域筛选与聚合,内存效率和处理速度都更高,直接从原始NetCDF数据一步得到结果:

import xarray as xr
import matplotlib.pyplot as plt

# 读取所有NetCDF文件
ds = xr.open_mfdataset(r"my_directory\*.nc", autoclose=True)

# 提取目标区域,并直接计算该区域的逐月SST均值(对lat、lon维度求平均)
sst_monthly_mean = ds['sst'].isel(lat=slice(1875, 2126), lon=slice(125, 751)).mean(dim=['lat', 'lon'])

# 转成DataFrame(可选,也可以直接用Xarray绘图)
sst_df = sst_monthly_mean.to_dataframe(name='sst_mean').reset_index()

# 绘制时间序列
plt.figure(figsize=(12, 6))
plt.plot(sst_df['time'], sst_df['sst_mean'])
plt.xlabel('时间')
plt.ylabel('海表温度(SST)均值')
plt.title('赤道太平洋特定区域逐月SST均值时间序列')
plt.grid(True)
plt.show()

这个方法跳过了将高维数据展开为千万级行DataFrame的步骤,大幅节省内存,计算速度也更快,更适合处理气象类NetCDF数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:35:19