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

如何用循环或函数计算十年日均SST的365个日均值?

问题描述

我有一份包含十年每日温度数据的DataFrame,希望计算这十年的日均温度(即每年同一天的温度平均值),最终得到365个数值。目前我通过手动选取行的方式实现了前3天的计算,但想知道如何用循环或更高效的方法完成全部365天的计算。

现有手动实现的代码如下:

import pandas as pd
import numpy as np
import xarray as xr
import hvplot.pandas

ds = xr.open_dataset('multiyear_final.nc')
ds = ds.rename({'analysed_st':'SST'})

lon=[-52]
lat=[69]
lon1 = [-20]
lat1 = [74]
ds1 = ds.SST.sel(lon=lon, lat=lat, method='nearest')
ds2 = ds.SST.sel(lon=lon1, lat=lat1, method='nearest')

# 手动计算前3天的年均温度
df_time =  ds1.to_dataframe()
result1 = df_time.iloc[[0,365,730,1095,1460,1826,2191,2556,2921,3287]]
res1 = result1['SST'].mean()

result2 = df_time.iloc[[1,366,731,1096,1461,1827,2192,2557,2922,3288]]
res2 = result2['SST'].mean()

result3 = df_time.iloc[[2,367,732,1097,1462,1828,2193,2558,2923,3289]]
res3 = result3['SST'].mean()

解决方案

方法一:用Pandas按日序分组(最简洁)

不需要写循环,直接利用Pandas时间索引的dayofyear属性分组,自动处理闰年偏移,一步得到365个日均温度:

df_time = ds1.to_dataframe()
# 按一年中的第几天分组,计算每组的温度均值
daily_mean = df_time.groupby(df_time.index.dayofyear)['SST'].mean()
# daily_mean是一个Series,索引为1-365,对应一年中每一天的十年平均温度

方法二:用循环实现(满足你的需求)

如果一定要用循环,建议通过dayofyear筛选而非硬编码索引(避免闰年出错):

df_time = ds1.to_dataframe()
daily_means = []
# 遍历一年的365天
for day_num in range(1, 366):
    # 筛选出所有年份中第day_num天的数据
    day_data = df_time[df_time.index.dayofyear == day_num]['SST']
    # 计算均值并加入列表
    daily_means.append(day_data.mean())
# daily_means是包含365个均值的列表,顺序对应第1天到第365天

方法三:直接用Xarray处理(更高效,无需转DataFrame)

Xarray原生支持时间维度的分组操作,代码更简洁,适合气象数据处理:

# 直接对Xarray的DataArray按日序分组,求时间维度的均值
daily_mean_ds1 = ds1.groupby('time.dayofyear').mean(dim='time')
# 结果是一个新的DataArray,维度为dayofyear(1-365)
# 若需要转成列表或DataFrame:
daily_mean_list = daily_mean_ds1.values.tolist()
daily_mean_df = daily_mean_ds1.to_dataframe()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:49