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

AGTUGO agtugo en gmail.com
Mar Mayo 13 18:31:14 CEST 2014


Entiendo el punto pero tengo que pasar por un array intermedio. La idea es
agarrar un archivo csv direcatamente a un dataframe y de ahi sacar el
dataframe con las combinaciones, el método actual sería:

1.- Importar csv en dataframe
2.- Crear un array del dataframe
3.- Crear los indices de las combinaciones
4.- Usar la notacion de indices para crear el array
5.- Crear el dataset a partir del array

Método buscado:

1.- Importar csv en dataframe
2.- Crear indices de las combinaciones
3.- Usar "algo" usando los indices para crear el dataframe nuevo a partir
del dataframe viejo



2014-05-13 2:12 GMT-05:00 Kiko <kikocorreoso en gmail.com>:

>
>
>
> 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/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
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/c2b9d59e/attachment.html>


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