Hola gracias por tu sugerencia. Lo que necesito es por ejemplo:
para el ID 1 el target es 100, entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ? 20, 30, 50, 15, 45, 60 20 + 30 + 50 = 100 Lo que tu sugieres es que sume primero todos los números para cierto ID y luego valide si esa suma corresponde al target. Saludos. Manuel Alejandro Estévez Fernández El 8 de febrero de 2018, 15:36, Javier Rovegno Campos <tatadel...@gmail.com> escribió: > Hola Manuel: > > No se si entendí bien tu pregunta, pero para lo que necesitas se me ocurre > que puedes usar pandas: > > from io import StringIO > import pandas as pd > > > DATA="""id,target,valores > 1,100,20 > 1,100,30 > 1,100,50 > 1,100,15 > 1,100,45 > 1,100,60 > 2,150,75 > 2,150,75 > 2,150,100 > 3,1500,900 > 3,1500,500 > 3,1500,600 > 3,1500,1000 > 3,1500,750 > 3,1500,200 > 3,1500,300 > 3,1500,10 > 3,1500,30 > 3,1500,50 > """ > > df = pd.read_csv(StringIO(DATA)) > suma = df.groupby(['id','target'], as_index=False)['valores'].sum() > print(suma) > suma.query('valores-1 < target < valores+1') > > > Te dejo el gist https://gist.github.com/jrovegno/ > e1eb651b58a4338bfe9eff203d6c1e1c > > Saludos > > > 2018-01-12 17:35 GMT-03:00 Manuel A. Estevez Fernandez <stvz...@gmail.com> > : > >> Hola a todos, tengo la siguiente necesidad: >> >> Encontrar una combinación de valores pertenecientes a una colección cuyo >> resultado sea un numero determinado. >> >> Algo así: >> id target valores >> 1 100 20 >> 1 100 30 >> 1 100 50 >> 1 100 15 >> 1 100 45 >> 1 100 60 >> 2 150 75 >> 2 150 75 >> 2 150 100 >> 3 1500 900 >> 3 1500 500 >> 3 1500 600 >> 3 1500 1000 >> 3 1500 750 >> 3 1500 200 >> 3 1500 300 >> 3 1500 10 >> 3 1500 30 >> 3 1500 50 >> >> Toda esta información la tengo en un archivo csv. El cual leo y genero un >> diccionario: >> >> { >> id : { target : target , values : [ valores ] } >> , id : { target : target , values : [ valores ] } >> } >> >> con el siguiente codigo realizo un matriz de verdad de la longitud de la >> cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 >> con ese vale. >> >> import numpy as np >> import itertools >> >> for id in in diccionario : >> for tup in itertools.product([0,1] , repeat=len(diccionario[id]['va >> lues'])): >> resultado = np.sum( np.dot( np.array(list(tup)) , np.array( >> diccionario[id]['valores'] ) ) ) >> if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( >> diccionario[id]['target'] + 1) : >> print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', >> diccionario[id]['valores'] >> break >> >> >> >> La problematica que tengo es que obviamente entre mas grande sea la >> cantida de valores la combinaciones serán muchas más. >> >> Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de >> como empezar. >> >> No sé como hacerlo o si sea posible lo siguiente: >> Lanzar un proceso por ID. >> -Generar una segmentación de la matriz de verdad y asignarla un subproceso >> -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se >> detengan los subprocesos >> -Avanzar al siguiente ID. >> >> Saludos y gracias de antemano. >> >> >> >> Manuel Alejandro Estévez Fernández >> >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> >> > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es