gpt4 book ai didi

Python Xarray : how to convert a 3-d DataArray to a 2-d stacked Pandas dataframe

转载 作者:行者123 更新时间:2023-12-01 01:32:05 29 4
gpt4 key购买 nike

我有一个用于多次运行模型的时间序列数据的 3d xarray DataArray 数据量。因此,行按模拟时间步长进行索引,列只是捕获的有关模型的各种变量,然后深度坐标表示单独的模拟运行,因为我多次运行整个模拟。

我的目标是获取这个 3d xarray DataArray 并将其转换为 2d pandas 数据框,以便我可以将其导出到 CSV文件。为了做到这一点,我需要将每个模拟运行堆叠在一起,以便将 3d 数组转换为 2d 数组。

我有一些代码来生成一些测试数据,但我对 Xarray 不够熟悉,不知道如何进行这种堆叠。

这里是一些开发测试数据的代码。

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

results_matrix = np.zeros([5, 7, 4])
simulation_matrix = xr.DataArray(results_matrix,
coords={'simdata': ['val1', 'val2','val3','val4'],
'run': range(5),
'year': range(7)},
dims=('run', 'year', 'simdata'))

itercount = 0
for i in tqdm(range(5)):
simulation_matrix[i, :, :] = i
itercount += 1

此代码将生成一个如下所示的 DataArray

<xarray.DataArray (run: 5, year: 7, simdata: 4)>
array([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],

[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
... Additional arrays truncated

我希望将其转换为 2d Pandas 数据框,例如

        [0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]]]

有什么建议吗?

更新:

根据@rahlf23和@DSM的评论,我有一些运气simulation_matrix.to_dataframe('fred').unstack()

        fred
simdata val1 val2 val3 val4
run year
0 0 0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.0
6 0.0 0.0 0.0 0.0
1 0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
4 1.0 1.0 1.0 1.0
5 1.0 1.0 1.0 1.0
6 1.0 1.0 1.0 1.0

最佳答案

使用测试数据,您可以使用 to_pandas()pd.concat():

df = pd.concat([simulation_matrix.loc[i,:,:].to_pandas() for i in range(simulation_matrix.shape[2])])

产量:

simdata  val1  val2  val3  val4
year
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.0
6 0.0 0.0 0.0 0.0
0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
4 1.0 1.0 1.0 1.0
5 1.0 1.0 1.0 1.0
6 1.0 1.0 1.0 1.0
0 2.0 2.0 2.0 2.0
1 2.0 2.0 2.0 2.0
2 2.0 2.0 2.0 2.0
3 2.0 2.0 2.0 2.0
4 2.0 2.0 2.0 2.0
5 2.0 2.0 2.0 2.0
6 2.0 2.0 2.0 2.0
0 3.0 3.0 3.0 3.0
1 3.0 3.0 3.0 3.0
2 3.0 3.0 3.0 3.0
3 3.0 3.0 3.0 3.0
4 3.0 3.0 3.0 3.0
5 3.0 3.0 3.0 3.0
6 3.0 3.0 3.0 3.0

关于Python Xarray : how to convert a 3-d DataArray to a 2-d stacked Pandas dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768562/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com