我目前正在處理每日氣候數據 (ERA5),并正在使用 xarray 對其進行分析。da<xarray.DataArray (time: 8036)>dask.array<stack, shape=(8036,), dtype=float32, chunksize=(1,), chunktype=numpy.ndarray>Coordinates: * time (time) datetime64[ns] 1979-01-01 1979-01-02 ... 2000-12-31我想從時間序列的當地月平均值計算這些數據的每日異常值。也就是說,我想從 1979 年 1 月的所有日子中去掉(例如) 1979 年 1 月的平均值。我想在我的數組中每年的每個月都這樣做。我認為目前沒有一種簡單的方法可以用 xarray 做到這一點,但我很感激人們能找到任何解決方法!:)
2 回答

慕萊塢森
TA貢獻1810條經驗 獲得超4個贊
一個稍微漂亮的方法,它可以讓您了解如何將事物擴展到其他類型的異常是:
da = da.assign_coords(year_month=da.time.dt.strftime("%Y-%m"))
result = da.groupby("year_month") - da.groupby("year_month").mean("time")

ITMISS
TA貢獻1871條經驗 獲得超8個贊
好的,如果有人感興趣,我想我已經找到了答案,不過我會暫時擱置這個問題,因為在我看來,這是一個非常丑陋的解決方案,如果有比我能拼湊出來的更好的解決方案,那就太好了一起!
da_cp = da.copy().load()
for year in ['1979', '1980', '1981', ..., '1998', '1999', '2000']:
for month in ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']:
da_cp.loc[f'{year}-{month}'] -= da_cp.loc[f'{year}-{month}'].mean('time')
我已經對此進行了數字測試,它給出了正確的答案,但目前它不是很靈活,我希望這也能擴展到“局部季節性異?!薄?/p>
添加回答
舉報
0/150
提交
取消