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 )





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/

Responder a