如何将三维xarray转换为指定结构的DataFrame并导出为Excel表格
解决方法
你可以通过调整DataFrame的层级索引结构,将patient和day作为多级列索引、parameter作为行索引,导出后就会符合你期望的Excel多层表头结构,具体代码如下:
import numpy as np import pandas as pd import xarray as xr # 原有xarray构建代码 data_np = np.array([ [ [1, 2, 0, 8], [3, 4, 11, 2], [5, 6, 43, 90] ], [ [7, 8, 2, 66], [9, 10, 31, 21], [11, 12, 56, 45] ] ]) dims = ['patient', 'parameter', 'day'] coords = {'patient':['Joe','Bill'], 'parameter':['a', 'b', 'c'], 'day':[0, 1, 2, 3]} data = xr.DataArray(data_np, dims = dims, coords = coords ) # 转换为符合导出结构的DataFrame df = data.to_dataframe('value') # 将patient和day从行索引移动到列索引,形成多级列 df = df.unstack(level=['patient', 'day']) # 去掉列索引最外层的value层级 df = df.droplevel(0, axis=1) # 导出Excel,多级表头会自动合并 with pd.ExcelWriter("main.xlsx") as writer: df.to_excel(writer, merge_cells=True)
代码说明
unstack(level=['patient', 'day']):将原本在多级行索引中的patient和day移动到列方向,形成两级列索引droplevel(0, axis=1):移除转换后自动生成的最外层value列索引,保留patient和day两级表头to_excel默认开启merge_cells=True,导出的Excel会自动合并相同patient的表头单元格,和期望结构完全一致。
内容的提问来源于stack exchange,提问作者DavideL
相关产品推荐
相关产品推荐

