Python 如何将三维Numpy阵列转换为熊猫数据帧?

Python 如何将三维Numpy阵列转换为熊猫数据帧?,python,pandas,numpy,numpy-ndarray,Python,Pandas,Numpy,Numpy Ndarray,问题: 我有一个三维Numpy阵列: X X.shape:(1797,2500) 上述代码产生以下输出: 1797 (1797, 2) [23.293915 36.37388 ] [21.594519 32.874397] [27.29872 26.798382] 因此,有1797个数据点——每个点都有一个X和一个Y坐标 这1797个点有500次迭代 我想要一个这样的数据帧: Index Column | X-coordinate | Y-coordinate 0

问题: 我有一个三维Numpy阵列:

X

X.shape:(1797,2500)

上述代码产生以下输出:

1797
(1797, 2)
[23.293915 36.37388 ]
[21.594519 32.874397]
[27.29872  26.798382]
因此,有1797个数据点——每个点都有一个X和一个Y坐标 这1797个点有500次迭代

我想要一个这样的数据帧:

Index Column       |  X-coordinate  |  Y-coordinate
0                  |  X[0][0][0]    |  X[0][1][0]
0                  |  X[1][0][0]    |  X[1][1][0]
0                  |  X[2][0][0]    |  X[2][1][0]
('0') 1797 times
1                  |  X[0][0][1]    |  X[0][1][1]
1                  |  X[1][0][1]    |  X[1][1][1]
1                  |  X[2][0][1]    |  X[2][1][1]
('1' 1797 times)
.
.
.
and so on
till 500
我尝试了这里提到的技巧,但我真的很难理解numpy/pandas:

  • 请帮帮我。 希望我坚持提问的原则。

    试着这样做:

    index = np.concatenate([np.repeat([i], 1797) for i in range(500)])
    df = pd.DataFrame(index=index)
    df['X-coordinate'] = X[:, 0, :].T.reshape((-1))
    df['Y-coordinate'] = X[:, 1, :].T.reshape((-1))
    

    下面是一个包含示例数据的解决方案:

    a,b,c = X.shape
    # in your case
    # a,b,c = 1797, 500
    
    pd.DataFrame(X.transpose(1,2,0).reshape(2,-1).T,
                 index=np.repeat(np.arange(c),a),
                 columns=['X_coord','Y_coord'] 
                )
    
    输出:

       X_coord  Y_coord
    0        0        3
    0        6        9
    0       12       15
    0       18       21
    1        1        4
    1        7       10
    1       13       16
    1       19       22
    2        2        5
    2        8       11
    2       14       17
    2       20       23
    

    提问纪律说:展示你所尝试的,并解释为什么它不起作用。这里是权威链接:嗨,MadPhysician,我道歉。请允许我更新这个问题。再一次,向论坛和@MadPhysicast表示诚挚的歉意,当我正在准备你要求的指针时,我收到了一些关于这个问题的回复的通知,这些回复解决了我的问题。这是我的第一个问题,从下一次开始我会非常小心的。您好@Quang,非常感谢您的及时回答。它解决了我的问题。你好,布鲁诺,非常感谢你的及时回复。我也尝试过你的方法,它也解决了问题。
       X_coord  Y_coord
    0        0        3
    0        6        9
    0       12       15
    0       18       21
    1        1        4
    1        7       10
    1       13       16
    1       19       22
    2        2        5
    2        8       11
    2       14       17
    2       20       23