5 votos

¿Borrar registros duplicados en la tabla de atributos y mantener el valor mínimo en PyQGIS?

Tengo dos campos: ID_PARCEL y NL . El ID_PARCEL es el campo que contiene registros duplicados. Me gustaría eliminar el registro duplicado manteniendo el mínimo NL valor del campo. Por ejemplo: el valor 22 en el campo ID_PARCEL está duplicado, por lo que la fila de la tabla de atributos que debe eliminarse es la que tiene el valor más alto en el NL que en este caso es el valor 627.

He buscado en la web, pero lo que he encontrado es borrar registros duplicados sin la condición de mantener el valor mínimo de otro campo. ¿Puede alguien ayudarme?

enter image description here

1 votos

Es posible hacer esto sin código usando SQL (incluso si no estás usando una base de datos). ¿O quieres usar pyqgis específicamente?

6voto

Geoffrey Puntos 228

Si entiendo su pregunta, puede utilizar el siguiente código:

layer= iface.activeLayer() # load the layer as you want
vals = {} # create an empty dictionary

# Let's populate the dictionary
for feat in layer.getFeatures():
    if feat['ID_PARCEL'] not in vals:
        vals[feat['ID_PARCEL']] = [feat['NL']]
    else:
        vals[feat['ID_PARCEL']].append(feat['NL'])

# Let's find the minimum value from the "NL" field for each "ID_PARCEL" field
for key, value in vals.iteritems():
    vals[key] = min(value)

# Let's delete the unwanted features
with edit(layer):
    for feature in layer.getFeatures():
        k = feature['ID_PARCEL']
        if feature['NL'] != vals[k]:
            layer.deleteFeature(feature.id())

Dado que las modificaciones se aplicarán inmediatamente, le rogamos que crear una copia de seguridad de los datos originales antes de ejecutar el código anterior.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X