首页 > 解决方案 > 带有 Xarray 的字典中 pandas DataFrame 的总和

问题描述

我想知道是否有一种优雅的方法可以使用 Xarray 包对具有完全相同索引和列的 pd.DataFrame 进行求和。

问题

import numpy as np
import pandas as pd
import xarray as xr

np.random.seed(123)
pdts = pd.Index(["AAPL", "GOOG", "FB"], name="RIC")
dates = pd.date_range("20200601", "20200620", name="Date")
field_A = pd.DataFrame(np.random.rand(dates.size, pdts.size), index=dates, columns=pdts)
field_B = pd.DataFrame(np.random.rand(dates.size, pdts.size), index=dates, columns=pdts)
field_C = pd.DataFrame(np.random.rand(dates.size, pdts.size), index=dates, columns=pdts)
df_dict = {
    "A": field_A,
    "B": field_B,
    "C": field_C,
}

我想获得的是res = df_dict["A"] + df_dict["B"] + df_dict["C"]使用我刚开始学习的 Xarray 包。我知道有使用 Pandas 的解决方案,例如:

res = pd.DataFrame(np.zeros((dates.size, pdts.size)), index=dates, columns=pdts)
for k, v in df_dict.items():
    res += v

尝试

我在 Xarray 中尝试过的内容:

由于 Dataset 类看起来像一个数据字典,我认为最直接的选择是:

ds = xr.Dataset(df_dict)

但是,当执行ds.sum()它时,我不允许我对不同的数据变量求和,结果要么是对“日期”求和,要么是对“RIC”求和,或者对两者求和,但对每个数据变量执行。

任何想法 ?提前致谢。

标签: pythonpandasdataframepython-xarray

解决方案


看起来像这样做的一种方法是ds.to_array().sum("variable")


推荐阅读