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. 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/
