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

Kiko kikocorreoso en gmail.com
Mar Mayo 13 09:12:28 CEST 2014


El 13 de mayo de 2014, 7:23, AGTUGO <agtugo en gmail.com> escribió:

> 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)
>
>
>
No entiendo muy bien qué quieres hacer. Si tienes Pandas, tienes Numpy.¿Por
qué no simplemente haces un DataFrame usando el numpy array final que has
obtenido?

Sin usar numpy (que deberías tener instalado porque tienes Pandas
instalado, repito):

from itertools import combinations

lista = [list(range(i,i+5)) for i in range(0,50,5)]
final = []
for i in combinations(range(10),2):
    final.append(lista[i[0]]+lista[i[1]])
df = pd.DataFrame(final, columns = range(10))


>
>
> 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
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140513/c17346d9/attachment.html>


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