在 Python xarray 中减去每个网格的平均月值的最佳方法

问题描述

来自 here 的玩具数据集:

class Season(models.Model):
    season = models.CharField(max_length=10)
    buyer = models.ForeignKey(Buyer,on_delete=models.CASCADE)
    fruit = models.ForeignKey(Fruit,on_delete=models.CASCADE)

我知道 here 我可以找到如何从 import numpy as np import pandas as pd import seaborn as sns import xarray as xr np.random.seed(123) xr.set_options(display_style="html") times = pd.date_range("2000-01-01","2001-12-31",name="time") annual_cycle = np.sin(2 * np.pi * (times.dayofyear.values / 365.25 - 0.28)) base = 10 + 15 * annual_cycle.reshape(-1,1) tmin_values = base + 3 * np.random.randn(annual_cycle.size,3) tmax_values = base + 10 + 3 * np.random.randn(annual_cycle.size,3) ds = xr.Dataset( { "tmin": (("time","location"),tmin_values),"tmax": (("time",tmax_values),},{"time": times,"location": ["IA","IN","IL"]},) 中的变量中减去平均每月值,如下所示:

xarray.DataSet()

那么,我可以为每个位置做减法吗?

我尝试针对位置月份组执行此操作,但 climatology = ds.groupby("time.month").mean("time") anomalies = ds.groupby("time.month") - climatology anomalies.mean("location").to_dataframe()[["tmin","tmax"]].plot() 不允许传递多个组。然后,我尝试使用 xarray.DataSet.groupby() 制作位置月份,但它只允许传递维度;我可以使用 xarray.DataSet.stack() 提取月份值,但它们被恢复为一个新变量,而不是一个维度。我可以对所有位置使用 time.monthfor,但速度太慢(我有大约 65000 个位置)。

预期的结果或过程类似于:

xarray.DataSet.apply()

仅在 for each location: climatology = ds.groupby("time.month").mean("time") anomalies = ds.groupby("time.month") - climatology 范围内的解决方案是最好的,但如果使用 xarray 或其他解决方案可行且速度相当快,那么也欢迎使用这些解决方案。

编辑

这是我目前使用 `pd.DataFrame()' 的解决方

pd.DataFrame()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)