爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 19738|回复: 6

[求助] xarray怎样从逐月数据文件挑选部分年的冬季数据做逐年季节平均?

[复制链接]

新浪微博达人勋

发表于 2020-11-8 17:15:32 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
使用xarray读取了一个nc文件,数据是逐月的,尝试了选取特定年份的冬季数据,目前只能按下面的方法选,有点太繁琐,求助有没有简单点的方法?
times = xr.DataArray(
pd.to_datetime(['1966-12-01','1967-01-01','1967-02-01',……,'1999-12-01','2000-01-01','2000-02-01']), dims="new_time")
air_DJF=(air_DJF.sel(time=times))

然后要求逐年冬季平均怎么求呢?用groupby做只能求总的平均
[size=13.0667px]air.groupby(air.time.dt.season).mean())
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-11-8 23:08:14 | 显示全部楼层
Nafisa6 发表于 2020-11-8 22:19
找了很久按照先重采样再做季节平均来算,可以出来结果,但是跟直接取某一年的冬季结果不一样,有没有大神帮 ...

找到原因了,改成air_season=(air.resample(time = '3MS').mean())就可以了
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-11-8 22:04:42 | 显示全部楼层
尽头的尽头 发表于 2020-11-8 20:50
季节平均以后对时间做平均就是四个季节了.mean('time')

请问可以说的具体点怎么做么,我想要的结果是1966冬、1967冬……2000冬这样的
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

发表于 2020-11-8 20:50:41 | 显示全部楼层
季节平均以后对时间做平均就是四个季节了.mean('time')
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-11-8 22:19:54 | 显示全部楼层
找了很久按照先重采样再做季节平均来算,可以出来结果,但是跟直接取某一年的冬季结果不一样,有没有大神帮忙看看是什么问题?
  1. air=air.loc['1960-12-01':'2019-02-28']
  2. air_season=(air.resample(time = '3M').mean())
  3. air_DJF=air_season.loc[air_season.time.dt.month==12,:,:]
  4. air_DJF_mean=air_DJF.mean(dim=['time'])

  5. air_DJF=air_DJF.sel(time=air_DJF['time.year'].isin([1960]))
复制代码




密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-11-10 15:48:48 | 显示全部楼层
Nafisa6 发表于 2020-11-8 22:04
请问可以说的具体点怎么做么,我想要的结果是1966冬、1967冬……2000冬这样的

噗,不好意思,刚刚点错点到反对了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-4-21 15:04:03 | 显示全部楼层
Nafisa6 发表于 2020-11-8 22:19
找了很久按照先重采样再做季节平均来算,可以出来结果,但是跟直接取某一年的冬季结果不一样,有没有大神帮 ...

请问一下,我需要的是79年冬到18年冬天,将您loc后的那两个时间改成我这个时间,但却求出来的都是nan
filename = r'E:\pyclass\mslp.mon.mean.nc'
dataset = xr.open_dataset(filename)
mslp = dataset['mslp']
lon = dataset['lon']
lat = dataset['lat']
slp = mslp.loc['1979-01-01':'2019-02-28']
slp_season = (slp.resample(time='3MS').mean())
slp_DJF = slp_season.loc[slp_season.time.dt.month == 12, :, :]
slp_DJF_mean = slp_DJF.mean(dim=['time'])
这个slp_DJP都是nan
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表