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/

Responder a