저는 고전적인 xarray 데이터 세트를 가지고 있습니다. 이들은 월별 데이터 (월간 데이터 38 년)입니다.xarray 데이터 세트의 groupby에 대한 quantile 메소드
매월 별개의 값을 계산하는 데 관심이 있습니다. 내가 사용하는 각 달의 평균하려는 경우
<xarray.Dataset>
Dimensions: (lat: 26, lon: 71, time: 456)
Coordinates:
* lat (lat) float32 25.0 26.0 27.0 28.0 29.0 30.0 31.0 32.0 ...
* lon (lon) float32 -130.0 -129.0 -128.0 -127.0 -126.0 -125.0 ...
* time (time) datetime64[ns] 1979-01-31 1979-02-28 1979-03-31 ...
Data variables:
var1 (time, lat, lon) float32 nan nan nan nan nan nan nan nan ...
var2 (time, lat, lon) float32 nan nan nan nan nan nan nan nan ...
var3 (time, lat, lon) float32 nan nan nan nan nan nan nan nan ...
......
예를 들어, :
ds.groupby(‘time.month’).mean(dim=‘time’)
을 내가
ds.groupby(‘time.month’).quantile(0.75, dim=‘time’)
을하려고하면하지만, 그러나
AttributeError: 'DatasetGroupBy' object has no attribute 'quantile'
를 얻을 수 Pandas 문서에 기초하여, 그룹 B에 대한 quantile 작업 y 개체.
는 사실, 나는 다음과 같은 시도 :
df_ds = xr.Dataset.to_dataframe(ds)
df_ds = df_ds.reset_index()
df_ds = df_ds.set_index('time')
df_ds.groupby(pd.TimeGrouper(freq='M')).quantile(0.75)
하고 작동을; 물론 이것은 하나의 인덱스 만 있기 때문에 훨씬 간단한 예제이며 실제로 하나의 인덱스에만 reset_index/set_index를 설정하지 않으면 팬더에서 multiindex를 처리 할 수 없다는 오류가 발생합니다.
그럼, xarray로 할 수 있습니까? 아마도 일부 적용/람다 조합을 사용합니까?
매우 우아하지 않은 방법으로 발견했습니다. 내가 4 개 변수를 (내가 변수 이름을 통해 볼 수 있었다,하지만 난 여기 안) 때문에 가능하다 : 나는 기본적으로 xarray를 해결
Data_clim_monthly_75g = ds.where(iok_conus_xarray).groupby('time.month')
Data_clim_monthly_75 = ds.where(iok_conus_xarray).groupby('time.month').mean(dim='time')
v1 = Data_clim_monthly_75['var1'].values
v2 = Data_clim_monthly_75['var2'].values
v3 = Data_clim_monthly_75['var3'].values
v4 = Data_clim_monthly_75['var4'].values
for k, gp in Data_clim_monthly_75g:
v1[k-1] = np.nanpercentile(gp['var1'].values,q=75,axis=0)
v2[k-1] = np.nanpercentile(gp['var2'].values,q=75,axis=0)
v3[k-1] = np.nanpercentile(gp['var3'].values,q=75,axis=0)
v4[k-1] = np.nanpercentile(gp['var4'].values,q=75,axis=0)
Data_clim_monthly_75['var1'] = (('month','lat','lon'),v1)
Data_clim_monthly_75['var2'] = (('month','lat','lon'),v2)
Data_clim_monthly_75['var3'] = (('month','lat','lon'),v3)
Data_clim_monthly_75['var4'] = (('month','lat','lon'),v4)
. 나는 여전히 xarray 내의 솔루션을 좋아할 것이다.
위대한 - 실제로 그것은 내 솔루션보다 효과적이었습니다. – claire