[Python-es] Combinaciones no repetidas de renglones con numpy/pandas
Kiko
kikocorreoso en gmail.com
Mar Mayo 13 19:16:26 CEST 2014
El 13 de mayo de 2014, 18:31, AGTUGO <agtugo en gmail.com> 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 <kikocorreoso en gmail.com>:
>
>
>>
>>
>> El 13 de mayo de 2014, 7:23, AGTUGO <agtugo en gmail.com> 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
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
>
> --
> Arturo Muñoz Tolosa
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140513/7534280b/attachment.html>
Más información sobre la lista de distribución Python-es