固定DataFrame的坐标顺序?

问题描述

我正在尝试制作一个DataFrame来存储从测量测试中获取的几个数据集。 数据具有8个维度(尺寸)以指定测试条件。 {'Machine','Year','Month','Compensation','Axis','SensorID','Pos(ition)'}。

当我从测试中制作一个DataFrame时,我发现尺寸是按字母顺序排列的,即: {'Axis','Compensation','Machine','Month','Pos','SensorID','Year'}。

因此,输出如下图所示。

dimensions forced into alphabetical order

为了便于理解数据,我想保留尺寸的初始顺序 {'Machine','Year','Month','Compensation','Axis','SensorID','Pos'}。

是否可以保留尺寸的初始顺序? 还是有更好的方法来处理这类高维数据?

Python代码如下所示。 例如,我从不同的机器上获得了3个数据,分别是“ MC_A”,“ MC_B”和“ MC_C”。 数据分别存储在DataArray'da','da2'和'da3'中。 为了创建一个存储它们的DataFrame,我使用了'merge'方法

import xarray as xr
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px

x = np.linspace(0,1500,16)
y = np.random.random((1,1,6,len(x)))
y2 = np.random.random((1,len(x)))
y3 = np.random.random((1,len(x)))

da = xr.DataArray(y,dims=('Machine','Year','Month','Compensation','Axis','SensorID','Pos'),coords={'Machine':['MC_A'],'Year':['2020'],'Month':['Aug'],'Compensation':[1],'Axis':['X'],'SensorID':range(6),'Pos':x},name='val')

da2 = xr.DataArray(y2,coords={'Machine':['MC_B'],name='val')

da3 = xr.DataArray(y3,coords={'Machine':['MC_C'],name='val')

ds = xr.merge([da,da2,da3])
# print(da)
df = ds.to_dataframe()
# df.reorder_levels(['Machine','Errors','Pos'])

df

解决方法

1-您是否真的需要使用XArray?在您给出的示例中,您可以直接实例化DataFrame,然后将它们串联起来。

da = pd.DataFrame({'Machine':['MC_A'],'Year':['2020'],'Month': 'Aug'],'Compensation':[1],'Axis':['X'],'SensorID':range(6),'Pos':x})
...
ds = pd.concat([da,da1,da2])

2-如果这样做,则可以合并数据框而不是

df = pd.concat([da.to_dataframe(),da2.to_dataframe(),da3.to_dataframe()])

请注意,默认情况下,熊猫sort=False传递给concat