[Python-es] Combinaciones no repetidas de renglones con numpy/pandas

AGTUGO agtugo en gmail.com
Mar Mayo 13 07:23:37 CEST 2014


Hola,

He estado tratando de hacer implementacion solamente con panda de lo
siguiente que ya tengo con numpy, pero no me ha salido nada bien. Para los
mas entradillos con pandas espero que lo siguiente sea trivial.

La entrada son datos tabulados de dos dimensiones o una matrix, la idea es
formar todas las combinaciones, sin repetir y sin sustitución, de los
renglones. La pareja de renglones se ponen en un solo renglon.

Mi algoritmo actual es crear los indices de las combinaciones posibles, y
despues crear la mezcla usando los indices. En codigo sería lo siguiente.

#### combinaciones.py


import numpy as np
import itertools
rows = 10
columns =5
data = np.arange(rows*columns).reshape(rows,columns)
print('\n===Data===\n')
print(data)
to_mix = np.arange(rows)
mixed = list(itertools.product(to_mix,to_mix))
combination = [x for x in mixed if (x[0]< x[1])]
combination = np.array(combination)
print('\n===Combination===\n')
print(combination)


final_data = np.hstack((data[combination[:,0],:],data[combination[:,1],:]))
print('\n===Final Data===\n')
print(final_data)




Resultado:

===Data===

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 ...,
 [35 36 37 38 39]
 [40 41 42 43 44]
 [45 46 47 48 49]]

===Combination===

[[0 1]
 [0 2]
 [0 3]
 ...,
 [7 8]
 [7 9]
 [8 9]]

===Final Data===

[[ 0  1  2 ...,  7  8  9]
 [ 0  1  2 ..., 12 13 14]
 [ 0  1  2 ..., 17 18 19]
 ...,
 [35 36 37 ..., 42 43 44]
 [35 36 37 ..., 47 48 49]
 [40 41 42 ..., 47 48 49]]




Al parecer no es tan sencillo crear un nuevo dataframe usando los indices
en panda. Espero que me puedan dar una orientación saludos.



-- 
Arturo Muñoz Tolosa
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140513/68a5144b/attachment.html>


Más información sobre la lista de distribución Python-es