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/
