Tengo una columna titulada CompanyNam y necesito extraer la información de la propiedad. Por ejemplo, si CEZ es la primera empresa, le asigno el número 1, luego Sokolovska es el siguiente número, etc. Si CEZ vuelve a aparecer en alguna otra fila, obtendrá el número 1. Es importante tener en cuenta que si tengo NULL en la columna, asigno un número diferente a cada entrada de la fila NULL. Necesito los números correspondientes a la salida CompanyNam. Tengo el siguiente código:
EmptyArray = []
d = {}
newlist = []
for gFeat in GeneratorLayer.getFeatures():
Owner = gFeat.attributes()[gProvider.fieldNameIndex('CompanyNam')].toString()
A = ([str(i) for i in Owner]) #convert from PyQt4.QtCore.QString to normal string
B = ''.join(A)
EmptyArray.append(B)
for m, n in enumerate(EmptyArray):
if n not in d:
d[n] = [m+1]
newlist.append({n: d[n]})
if n == '':
d[n] = [m+1]
newlist.append({n: d[n]}) #Every NULL gets a new number
for names in newlist:
for o, p in names.iteritems():
if o == '':
a2 = str('{},NULL'.format(p))
elif o != '':
a2 = str('{},{}'.format(p,o)
A continuación, utilizo a2 en otros pasos. El código funciona bien para una columna con 60-100 filas, pero para columnas más grandes, los tiempos de cálculo son realmente altos. ¿Pueden sugerirme alguna forma de reescribir este código, manteniendo la lógica? La salida tiene el siguiente aspecto:
[1],CEZ
[1],CEZ
[1],CEZ
[1],CEZ
[1],CEZ
[1],CEZ
[1],CEZ
[1],CEZ
[9],Sokolovska
[10],International
[11],ENERGOTRANS,
[12],Alpiq
[13],Mittal Steel
[14],United
[1],CEZ
[1],CEZ
[17],Dalkia.....
Sería aún mejor tener la numeración [1 ], [2], [3] y no [1 ], [9], [10], pero no he descubierto cómo hacerlo.