如何在大型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
相关产品推荐
相关产品推荐

