问题描述
来自 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.month
或 for
,但速度太慢(我有大约 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 (将#修改为@)