0

I have a 2d numpy matrix, for example:

arr = np.arange(0, 12).reshape(3,4)

This I would like to get in a DataFrame, such that:

X Y Z
0 0 0
0 1 1
0 2 2
0 3 3
1 0 4
1 1 5
1 2 6
1 3 7
2 0 8
2 1 9
2 2 10
2 3 11

How would I do this (efficiently)?

timbmg
  • 3,192
  • 7
  • 34
  • 52
  • What is the logic you have used to get from `arr` to the data in your dataframe? – jpp Apr 28 '18 at 17:35

1 Answers1

0

You can use numpy functions:

x1 =np.repeat(np.arange(arr.shape[0]), len(arr.flatten())/len(np.arange(arr.shape[0])))
x2 =np.tile(np.arange(arr.shape[1]), int(len(arr.flatten())/len(np.arange(arr.shape[1]))))
x3= arr.flatten()

pd.DataFrame(np.array([x1,x2,x3]).T, columns=['X','Y','Z'])

Output

    X   Y   Z
0   0   0   0
1   0   1   1
2   0   2   2
3   0   3   3
4   1   0   4
5   1   1   5
6   1   2   6
7   1   3   7
8   2   0   8
9   2   1   9
10  2   2   10
11  2   3   11
pythonic833
  • 3,054
  • 1
  • 12
  • 27