2

3 つのデータセットがあります。最初のデータセットは、データを保持する Data という名前です。表には 5 つの列と 3 つの行があります。各列は特定の位置を表し、X、Y 位置のセットで識別できます。各行は特定の深さ (Z) を表します。2 番目のデータセットは 5 つの X、Y 位置 (最初のデータ セットの列) を保持し、3 番目のファイルは 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

等....

パンダを使用して適切な(マルチ)インデックス列を作成することを考えていますが、適切な方法を見つけることができません

4

1 に答える 1

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、Zreset_index()を 3 レベルの MultiIndex のままにするのではなく、適切な列 ( ) にすることにしました。一般に、これはよりクリーンで便利です。

于 2013-10-14T18:32:01.547 に答える