将2D numpy数组重新排列为保持行索引的列向量

2024-10-03 04:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组:

enter image description here

我想重新安排它,以便将列堆叠在一起,保持它们的初始索引(可能是新列)。你知道吗

我想以这样的方式结束:

Jan2017 | 0 | 0
Feb2017 | 0 | 1
Mar2017 | 0 | 1
...
Jan2017 | 1 | 0 
Feb2017 | 1 | 0 etc

其中第一列和第二列表示初始数组的索引


Tags: numpy方式etc数组mar2017feb2017jan2017
2条回答

假设矩阵保存在A,然后通过A.transpose().flatten()得到向量

import numpy as np

A = np.arange(12).reshape(3,4)

print(A)
print(A.transpose().flatten())

您可以堆叠索引数组以及(可能)中的展平值和转置值DataFrame。你知道吗

例如:

作为pd导入

df = pd.DataFrame({0: [0,1,1,0,0,1,0],
                   1: [0,0,0,0,0,1,0],
                   2: [1,0,1,0,1,0,0]},
                  index=['Jan2017', 'Feb2017', 'Mar2017', 'Apr2017', 'May2017', 'Jun2017', 'Jul2017'])

可以这样处理:

>>> np.stack([np.repeat(np.arange(len(df.columns)), len(df)), df.values.T.ravel()], axis=1)
array([[0, 0],
       [0, 1],
       [0, 1],
       [0, 0],
       [0, 0],
       [0, 1],
       [0, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 1],
       [1, 0],
       [2, 1],
       [2, 0],
       [2, 1],
       [2, 0],
       [2, 1],
       [2, 0],
       [2, 0]], dtype=int64)

^{}用于创建索引:

>>> np.repeat(np.arange(len(df.columns)), len(df))
array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2])

^{}将数组转置,^{}将其展平:

>>> df.values.T.ravel()
array([0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0], dtype=int64)

然后使用^{}按行(因此axis=1)堆叠

相关问题 更多 >