我有3个数据集, 第一个名为Data的数据包含我的数据;该表有5列,3行 - 每列代表一个特定的位置,可以用一组X,Y位置标识,每行代表一个特定的深度(Z); 第二个数据集包含5个X,Y位置(第一个数据集的列),而第三个文件包含3个Z值(数据表的行)
import numpy as np
Data = np.arange(1, 16).reshape(3, 5) #holds the 'data' I am interested in
X = [0, 0, 1, 1, 2] #create 'X', 'Y' values
Y = [0, 1, 0, 1, 0]
XY = np.array((X, Y)).reshape(5, 2) # this is the format I have the 'X' and 'Y' values
Z = [-1, -5, -10]
z = np.array(Z)
我现在想要组合所有并拥有X,Y,Z,数据格式的新numpy数组(或pandas数据帧) 例如,对于给定的数据,表的前3行应该是:
X Y Z Data #this is a header, I just add it to make reading easier
0 0 -1 1
0 0 -5 6
0 0 -10 11
0 1 -1 2
0 1 -5 7
0 1 -10 12
等...
任何暗示如何做到这一点都会很棒 我正在考虑使用pandas来创建正确的(多)索引列,但我找不到正确的方法
答案 0 :(得分:2)
从X和Y构建MultiIndex,并使用unstack。
In [4]: columns = pd.MultiIndex.from_arrays([X, Y])
In [5]: df = DataFrame(Data, columns=columns, index=Z)
In [6]: df
Out[6]:
0 1 2
0 1 0 1 0
-1 1 2 3 4 5
-5 6 7 8 9 10
-10 11 12 13 14 15
In [7]: df1 = df.unstack().reset_index()
In [8]: df1.columns = ['X', 'Y', 'Z', 'Data']
In [9]: df1
Out[9]:
X Y Z Data
0 0 0 -1 1
1 0 0 -5 6
2 0 0 -10 11
3 0 1 -1 2
4 0 1 -5 7
5 0 1 -10 12
6 1 0 -1 3
7 1 0 -5 8
8 1 0 -10 13
9 1 1 -1 4
10 1 1 -5 9
11 1 1 -10 14
12 2 0 -1 5
13 2 0 -5 10
14 2 0 -10 15
我选择制作X,Y和Z正确的列(reset_index()
),而不是将它们留作三级MultiIndex。一般来说,这更清洁,更有用。