Sí lo unico que me causa un poco de ruido es usar el ciclo for para crear los renglones, siempre trato de evitarlos y usar streaming, indexing, slicing. Pero pues ya cambie mi forma de las combinaciones por tu método.
2014-05-13 14:49 GMT-05:00 Kiko <[email protected]>: > > > > El 13 de mayo de 2014, 20:52, AGTUGO <[email protected]> escribió: > > Pues aqui tengo el siguiente codigo donde no necesito crear un array >> intermedio. >> >> Creo que la mejor opcion es simplemente usar ix para tener indexing tipo >> numpy, >> ¿Que opinas Kiko? >> >> import numpy as np >> import itertools >> ## tamaño de los renglones y columnas de los datos tabulados >> >> rows = 10 >> columns =5 >> ## informacion proporcionada en forma tabulada aqui estoy simulando el csv >> data = np.arange(rows*columns).reshape(rows,columns) >> data_pa = pd.DataFrame(data, columns = ('A','B','C','D','E')) >> display(data_pa) >> >> ## lo siguiente crea los indices de las combinaciones >> >> 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) >> >> >> # separo los indices en dos variables >> index1_comb = combination[:,0] >> index2_comb = combination[:,1] >> >> #creo dos dataframes con los indices y despues los junto >> >> first_c=data_pa.iloc[index1_comb].reset_index(drop=True) >> second_c=data_pa.iloc[index2_comb].reset_index(drop=True) >> final_data_pandas = pd.concat((first_c,second_c),axis=1) >> display(final_data_pandas ) >> >> > En las versiones que te he dejado no uso en ningún momento numpy. ¿No te > valen como opción? > >> >> >> >> >> 2014-05-13 13:09 GMT-05:00 Kiko <[email protected]>: >> >> >>> >>> >>> El 13 de mayo de 2014, 20:05, AGTUGO <[email protected]> escribió: >>> >>> >>>> Muchas gracias, no es para clase. Es un programa para calcular la vida >>>> minima de un componente mecánico, entonces debo buscar la vida minima >>>> buscando todas las posibles combinaciones y despues hacer calculos. Esta >>>> rutina la hago varias veces con algunas variaciones, y con el dataframe es >>>> mas facil visualizar. >>>> >>>> Cuando paso a un array pierdo un poco de informacion de los headers, y >>>> la tengo que extraer y volver a meter. En mi opinion estar cambiando de >>>> tipos de datos aumenta la probabilidad de errores y la lectura posterior. >>>> Es más o menos el ya discutido problema de evitar el tipo matrix en numpy y >>>> solamente usar arrays aunque sea no tan transparente las operaciones >>>> matriciales. >>>> >>>> >>>> >>> Pues si te ha funcionado, perfecto, y si no es lo que buscabas seguimos >>> iterando. >>> >>> Saludos. >>> >>> >>>> 2014-05-13 12:16 GMT-05:00 Kiko <[email protected]>: >>>> >>>> >>>>> >>>>> >>>>> El 13 de mayo de 2014, 18:31, AGTUGO <[email protected]> escribió: >>>>> >>>>> 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 >>>>>> >>>>>> >>>>>> import pandas as pd >>>>> from itertools import combinations >>>>> >>>>> #Suponemos que este dataframe viene de leerlo con un pd.read_csv() >>>>> #Lo dejo así por simplificar >>>>> df0 = pd.DataFrame([list(range(i,i+5)) for i in range(0,50,5)], >>>>> columns = range(5)) >>>>> >>>>> #creamos el dataframe de destino con 10 columnas >>>>> df1 = pd.DataFrame(columns = range(10)) >>>>> >>>>> # De esta forma estás usando los índices del dataframe df0 para hacer >>>>> las combinaciones >>>>> for i,j in enumerate(combinations(df0.index,2)): >>>>> df1.loc[i] = np.append(df0.ix[j[0]], df0.ix[j[1]]) >>>>> >>>>> El dataframe df1 tendría todas las combinaciones. Me sigue pareciendo >>>>> complicado e innecesario lo que quieres hacer (a no ser que sea un >>>>> ejercicio para clase y entonces podría entender lo rebuscado del asunto). >>>>> >>>>> Saludos. >>>>> >>>>> >>>>>> >>>>>> 2014-05-13 2:12 GMT-05:00 Kiko <[email protected]>: >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>>>> El 13 de mayo de 2014, 7:23, AGTUGO <[email protected]> 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 >>>>>>>> [email protected] >>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> [email protected] >>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Arturo Muñoz Tolosa >>>>>> >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> [email protected] >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> [email protected] >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>> >>>>> >>>> >>>> >>>> -- >>>> Arturo Muñoz Tolosa >>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> [email protected] >>>> https://mail.python.org/mailman/listinfo/python-es >>>> FAQ: http://python-es-faq.wikidot.com/ >>>> >>>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> [email protected] >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> >> -- >> Arturo Muñoz Tolosa >> >> _______________________________________________ >> Python-es mailing list >> [email protected] >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > _______________________________________________ > Python-es mailing list > [email protected] > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > -- Arturo Muñoz Tolosa
_______________________________________________ Python-es mailing list [email protected] https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
