Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create 2D array from Pandas dataframe

Probably a very simple question, but I couldn't come up with a solution. I have a data frame with 9 columns and ~100000 rows. The data was extracted from an image, such that two columns ('row' and 'col') are referring to the pixel position of the data. How can I create a numpy array A such that the row and column points to another data entry in another column, e.g. 'grumpiness'?

A[row, col]
#  0.1232

I want to avoid a for loop or something similar.

like image 415
mgutsche Avatar asked Nov 17 '15 09:11

mgutsche


Video Answer


1 Answers

You could do something like this -

# Extract row and column information
rowIDs = df['row']
colIDs = df['col']

# Setup image array and set values into it from "grumpiness" column
A = np.zeros((rowIDs.max()+1,colIDs.max()+1))
A[rowIDs,colIDs] = df['grumpiness']

Sample run -

>>> df
   row  col  grumpiness
0    5    0    0.846412
1    0    1    0.703981
2    3    1    0.212358
3    0    2    0.101585
4    5    1    0.424694
5    5    2    0.473286
>>> A
array([[ 0.        ,  0.70398113,  0.10158488],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.21235838,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.84641194,  0.42469369,  0.47328598]])
like image 136
Divakar Avatar answered Sep 18 '22 10:09

Divakar