Example of DOV search methods for groundwater permits (grondwatervergunningen)

Binder

Mind that the data source of groundwater permits is just a WFS. It can be accessed with simple WFS calls from OWSLib. It is included in the pydov API for ease of access for less experienced users. And to provide a general interface with unit testing to all considered objects.

Use cases explained below

  • Get permits in a bounding box

  • Get permits in a bounding box based on specific properties

  • Select permits in a municipality and return depth

  • Get permits, returning fields not available in the standard output dataframe

  • Get for a certain permit the measured water quality parameters if available

[1]:
%matplotlib inline
import inspect, sys
import warnings; warnings.simplefilter('ignore')
[2]:
# check pydov path
import pydov

Get information about the datatype ‘GrondwaterVergunning’

[3]:
from pydov.search.grondwatervergunning import GrondwaterVergunningSearch
gwv = GrondwaterVergunningSearch()

A description is provided for the ‘Gwvergunningen’ datatype (in Dutch):

[4]:
gwv.get_description()
[4]:
'Vergunningen verleend voor het winnen van grondwater kunnen gevisualiseerd en bevraagd worden in de Databank Ondergrond Vlaanderen. \r\nSinds 1999 zijn vergunningen verleend volgens de VLAREM-wetgeving. Ze zijn ingedeeld in klasse 1, 2 of 3, waarbij er voor klasse 1 en 2 een vergunningsplicht geldt en voor klasse 3 een meldingsplicht. De indelingslijst is terug te vinden in VLAREM I (het winnen van grondwater is opgenomen onder rubriek 53). Oudere aanvragen zijn verleend volgens het Grondwaterdecreet. Deze zijn ingedeeld in categorie A, B en C.'

The different fields that are available for objects of the ‘Gwvergunningen’ datatype can be requested with the get_fields() method:

[5]:
fields = gwv.get_fields()

# print available fields
for f in fields.values():
    print(f['name'])
id_vergunning
pkey_installatie
exploitant
exploitant_naam
inrichtingsnummer
watnr
vergunning
vlaremrubriek
vergund_jaardebiet
vergund_dagdebiet
vergund_volume_per_projectdebiet
van_datum_termijn
tot_datum_termijn
aquifer_HCOVv1_vergunning
aquifer_vergunning
diepte
vergund_aantal_putten
inrichtingsklasse
vergunningverlenende_overheid_VVO
referentie_VVO
nacebelcode
IIOA_CBBnr
IIOA_adres
grondwaterlichaam
actie_waakgebied
x
y
exploitant_adres
cbbnr
kbonr
heffingsnummer
exploitant_namen
eerste_invoer
geom

Alternatively, you can list all the fields and their details by inspecting the get_fields() output or the search instance itself in a notebook:

[6]:
gwv
[6]:
pydov.search.grondwatervergunning.GrondwaterVergunningSearch

Vergunningen verleend voor het winnen van grondwater kunnen gevisualiseerd en bevraagd worden in de Databank Ondergrond Vlaanderen. Sinds 1999 zijn vergunningen verleend volgens de VLAREM-wetgeving. Ze zijn ingedeeld in klasse 1, 2 of 3, waarbij er voor klasse 1 en 2 een vergunningsplicht geldt en voor klasse 3 een meldingsplicht. De indelingslijst is terug te vinden in VLAREM I (het winnen van grondwater is opgenomen onder rubriek 53). Oudere aanvragen zijn verleend volgens het Grondwaterdecreet. Deze zijn ingedeeld in categorie A, B en C.

id_vergunning - Uniek volgnummer ter identificatie

  • type: string
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False

pkey_installatie - ID van de installatie (permkey). Een installatie is een verzameling van grondwaterlocaties van een IIOA (ingedeelde inrichting of activiteit) die 1 of meerdere filters hebben die betrekking hebben op dezelfde aquifer (watervoerende laag). Hyperlink naar de installatiefiche.

  • type: string
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False

exploitant - De ID van de exploitant (de natuurlijke of rechtspersoon) van een grondwaterwinning. Deze exploiteert de IIOA voor een bepaalde periode. Hyperlink naar de exploitantfiche.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

exploitant_naam - De naam van de exploitant (de natuurlijke of rechtspersoon) van een grondwaterwinning. Deze exploiteert de IIOA voor een bepaalde periode.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

inrichtingsnummer - Een inrichtingsnummer is de (unieke) identificatie die gegenereerd wordt in het omgevingsloket.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

watnr - Dossiernummer dat door VMM-afdeling bevoegd voor Grondwater gebruikt wordt voor hun interne werking. Hyperlink naar de vergunningfiche.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

vergunning - ID van de vergunning (permkey)

  • type: string
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False

vlaremrubriek - Code die gebruikt wordt in VLAREM (bijlage 1 VLAREM II) om een rubriek aan te duiden

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

vergund_jaardebiet - Vergunde hoeveelheid grondwater dat volgens de vergunning voor een grondwaterwinning mag opgepompt worden per jaar (in m³).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

vergund_dagdebiet - Vergunde hoeveelheid grondwater dat volgens de vergunning voor een grondwaterwinning mag opgepompt worden per dag(in m³).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

vergund_volume_per_projectdebiet - None

  • type: integer
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

van_datum_termijn - Startdatum van de deeltermijn van een vergunning.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

tot_datum_termijn - Einddatum van de deeltermijn van een vergunning.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

aquifer_HCOVv1_vergunning - None

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

aquifer_vergunning - None

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

diepte - Maximale vergunde diepte (in meter)

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

vergund_aantal_putten - Maximaal aantal pompputten dat in de vergunde watervoerende laag op een bepaalde locatie mag aangelegd worden (uit de vergunningfiche).

  • type: integer
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

inrichtingsklasse - Klasse van de omgevingsvergunning/milieuvergunning bepaald in VLAREM.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

vergunningverlenende_overheid_VVO - Vergunning Verlenende Overheid: de overheid of instantie die het vergunningsbesluit of de beroepsbeslissing heeft genomen.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

referentie_VVO - Nummer zoals het door de vergunning verlenende overheid gebruikt wordt voor communicatie. Sinds de inwerkingtreding van het omgevingsloket wordt hier het OMG-projectnummer ingevuld. Het nummer bestaat steeds uit 10 cijfers. De eerste 4 zijn het jaartal, nadien komt er een volgnummer.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

nacebelcode - Activiteiten uitgevoerd door de meest recente exploitant op de IIOA

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

IIOA_CBBnr - Nummer uit het Centraal Bedrijven Bestand voor de IIOA (Ingedeelde Inrichting of Activiteit)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

IIOA_adres - Adres van de IIOA (ligging van de grondwaterwinning)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

grondwaterlichaam - Grondwaterlichaam van de installatie, zoals afgebakend in uitvoering van de Europese Kaderrichtlijn Water

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

actie_waakgebied - de actie- en waakgebieden afgebakend i.k.v. het gebiedspecifieke beleid zoals vastgesteld in de herstelprogrammas voor grondwaterlichamen in ontoereikende kwantitatieve toestand binnen het Centraal Vlaams Systeem, het Brulandkrijtsysteem en het Sokkelsysteem (2016-2021)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

x - De x-coördinaat van de installatie in het Lambert72 coördinaatsysteem (in meter, EPSG:31370).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

y - De y-coördinaat van de installatie in het Lambert72 coördinaatsysteem (in meter, EPSG:31370).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

exploitant_adres - Adres van de exploitant (maatschappelijke zetel).

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

cbbnr - Nummer uit het Centraal Bedrijven Bestand van de exploitant.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

kbonr - Elke exploitant krijgt in de Kruispunt Bank voor Ondernemingen een uniek identificatienummer.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

heffingsnummer - Nummer dat gebruikt wordt bij de VMM-afdeling bevoegd voor heffingen voor hun interne werking.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

exploitant_namen - Eventueel alternatieve namen voor de exploitant (afkorting, commerciële naam, oude namen, ...)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

eerste_invoer - Het tijdstip waarop deze grondwatervergunning voor het eerst in DOV ingevoerd werd.

  • type: datetime
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False

geom - None

  • type: geometry
  • notnull: False
  • query: False
  • cost: 1
  • multivalue: False

Example use cases

Get permits in a bounding box

Get data for all the permits that are geographically located within the bounds of the specified box.

The coordinates are in the Belgian Lambert72 (EPSG:31370) coordinate system and are given in the order of lower left x, lower left y, upper right x, upper right y.

[7]:
from pydov.util.location import Within, Box

df = gwv.search(location=Within(Box(153145, 206930, 163150, 216935, epsg=31370)))
df.head()
[000/001] .
[7]:
id_vergunning pkey_installatie x y diepte exploitant_naam watnr vlaremrubriek vergund_jaardebiet vergund_dagdebiet van_datum_termijn tot_datum_termijn aquifer_vergunning inrichtingsklasse nacebelcode actie_waakgebied cbbnr kbonr
0 70509 https://www.dov.vlaanderen.be/data/installatie... 157118.69 210256.80 7.5 BOUWONDERNEMING VOORUITZICHT ANT-02373-A 53.2.2.b)2<25 116363.0 NaN 2021-04-30 2026-04-29 A0200: Kempens Aquifersysteem Klasse 2 41201: Algemene bouw van residentiële gebouwen geen actie/waakgebieden NaN 0404678357
1 61750 https://www.dov.vlaanderen.be/data/installatie... 157158.00 210393.00 9.0 BOUWONDERNEMING VOORUITZICHT ANT-00091-A 53.2.2.b)2<25 205020.0 NaN 2018-05-25 2018-11-25 A0200: Kempens Aquifersysteem Klasse 2 41201: Algemene bouw van residentiële gebouwen... NaN NaN 0404678357
2 64227 https://www.dov.vlaanderen.be/data/installatie... 157158.00 210393.00 9.0 BOUWONDERNEMING VOORUITZICHT ANT-00589-A 53.2.2.b)2<25 205020.0 NaN 2019-06-07 2020-06-07 A0200: Kempens Aquifersysteem Klasse 2 41201: Algemene bouw van residentiële gebouwen... NaN NaN 0404678357
3 67692 https://www.dov.vlaanderen.be/data/installatie... 154171.79 214241.69 NaN AQUAFIN ANT-01287-A 53.2.2.b)2<25 200000.0 NaN 2021-03-08 2023-09-08 A0100: Quartaire Aquifersystemen Klasse 2 37: Afvalwaterafvoer geen actie/waakgebieden 00418870000022 0440691388
4 66155 https://www.dov.vlaanderen.be/data/installatie... 154146.74 213791.84 8.0 SAMBER COLLEGE ANT-00514-A 53.2.2.b)2<25 31000.0 NaN 2019-05-03 2020-05-03 A0100: Quartaire Aquifersystemen Klasse 2 41101: Ontwikkeling van residentiële bouwproje... geen actie/waakgebieden NaN 0670629393
[8]:
len(df)
[8]:
697

697 permits were obtained in this bbox. However, not all permits are stil active, indicated by tot_datum_termijn. For more information about the extracted volumes, referenced by vlaremrubriek, see Vlarem II. See this link for more information about the potential definitions.

[10]:
fields['vlaremrubriek']
[10]:

vlaremrubriek - Code die gebruikt wordt in VLAREM (bijlage 1 VLAREM II) om een rubriek aan te duiden

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

Get permits in a bounding box with specific properties

Next to querying permits based on their geographic location within a bounding box, we can also search for permits matching a specific set of properties. For this we can build a query using a combination of the ‘Gwvergunningen’ fields and operators provided by the WFS protocol.

A list of possible operators can be found below:

[11]:
[i for i,j in inspect.getmembers(sys.modules['owslib.fes2'], inspect.isclass) if 'Property' in i]
[11]:
['PropertyIsBetween',
 'PropertyIsEqualTo',
 'PropertyIsGreaterThan',
 'PropertyIsGreaterThanOrEqualTo',
 'PropertyIsLessThan',
 'PropertyIsLessThanOrEqualTo',
 'PropertyIsLike',
 'PropertyIsNotEqualTo',
 'PropertyIsNull',
 'SortProperty']

In this example we build a query using the PropertyIsGreaterThan operator in addition to the earlier bbox, to restrict the query to active permits:

[12]:
from owslib.fes2 import PropertyIsGreaterThan

query = PropertyIsGreaterThan(propertyname='tot_datum_termijn',
                          literal='2020-09-01')
df = gwv.search(query=query,
                location=Within(Box(153145, 206930, 163150, 216935, epsg=31370)))

df.head()
[000/001] .
[12]:
id_vergunning pkey_installatie x y diepte exploitant_naam watnr vlaremrubriek vergund_jaardebiet vergund_dagdebiet van_datum_termijn tot_datum_termijn aquifer_vergunning inrichtingsklasse nacebelcode actie_waakgebied cbbnr kbonr
0 70509 https://www.dov.vlaanderen.be/data/installatie... 157118.69 210256.80 7.5 BOUWONDERNEMING VOORUITZICHT ANT-02373-A 53.2.2.b)2<25 116363.0 NaN 2021-04-30 2026-04-29 A0200: Kempens Aquifersysteem Klasse 2 41201: Algemene bouw van residentiële gebouwen geen actie/waakgebieden NaN 0404678357
1 67692 https://www.dov.vlaanderen.be/data/installatie... 154171.79 214241.69 NaN AQUAFIN ANT-01287-A 53.2.2.b)2<25 200000.0 NaN 2021-03-08 2023-09-08 A0100: Quartaire Aquifersystemen Klasse 2 37: Afvalwaterafvoer geen actie/waakgebieden 00418870000022 0440691388
2 56901 https://www.dov.vlaanderen.be/data/installatie... 160621.00 215168.00 65.0 VAN DE VELDE KATHY ANT/gw2-6688 53.6.1<25 10800.0 30.0 2013-12-03 2033-12-03 A0254: Zanden van Berchem en Voort buiten de R... Klasse 2 0000: onbekend geen actie/waakgebieden NaN NaN
3 56904 https://www.dov.vlaanderen.be/data/installatie... 157300.00 214115.00 45.0 VENNESHOP BVBA ANT-gw2/6919 53.8.2<17 5000.0 20.0 2014-10-24 2034-10-24 A0254: Zanden van Berchem en Voort buiten de R... Klasse 2 9601: Wassen en (chemisch) reinigen van textie... geen actie/waakgebieden NaN NaN
4 56979 https://www.dov.vlaanderen.be/data/installatie... 160161.00 215342.00 50.0 JAGERS RIEN ANT/gw2-6306 53.6.1<25 5037.0 13.8 2012-11-22 2032-06-26 A0254: Zanden van Berchem en Voort buiten de R... Klasse 2 0000: onbekend geen actie/waakgebieden NaN NaN
[13]:
len(df)
[13]:
325

Contrary to the earlier query, this result contains considerably less active permits in the considered bbox.

Mind that among these permits, there could also be permits for dewatering works, or ATES systems. Both of these are mostly not important in the development of a hydrogeological model. For dewatering works, it is currently not possible to see the operational status. These works could have well been finished some time ago, or not. See this link for more information about vlaremrubriek codes.

Select permits in a municipality and return depth

We can limit the columns in the output dataframe by specifying the return_fields parameter in our search.

In this example we query all the permits in the city of Ghent and return their depth. For this a remote WFS GML query is used as described in this notebook:

[14]:
from owslib.etree import etree
from owslib.wfs import WebFeatureService
from owslib.fes import PropertyIsEqualTo

from pydov.util.location import GmlFilter

gemeentegrenzen = WebFeatureService(
    'https://geo.api.vlaanderen.be/VRBG/wfs',
    version='1.1.0')
naam_filter = PropertyIsEqualTo(propertyname='NAAM', literal='Gent')
gemeente_poly = gemeentegrenzen.getfeature(
    typename='VRBG:Refgem',
    filter=etree.tostring(naam_filter.toXML()).decode("utf8"),
    outputFormat='text/xml; subtype=gml/3.2').read()

df = gwv.search(
    location=GmlFilter(gemeente_poly, Within),
    return_fields=('id_vergunning', 'diepte'))
df.hist(column='diepte')
[000/001] .
[14]:
array([[<Axes: title={'center': 'diepte'}>]], dtype=object)
../_images/notebooks_search_grondwatervergunningen_31_2.png
[15]:
df.describe()
[15]:
diepte
count 1879.000000
mean 17.469729
std 28.925402
min -1.000000
25% 5.000000
50% 7.000000
75% 17.000000
max 385.000000

Get permit data, returning fields not available in the standard output dataframe

Not all fields are available in the default output frame. However, you can examine the available fields with the get_fields() method and pass the desired field name to the return_fields parameter.

[16]:
from owslib.fes2 import PropertyIsGreaterThanOrEqualTo

query = PropertyIsGreaterThanOrEqualTo(
            propertyname='diepte',
            literal='200')

df = gwv.search(
    location=GmlFilter(gemeente_poly, Within),
    return_fields=('id_vergunning', 'diepte', 'vergunningverlenende_overheid_VVO'))

df.head()
[000/001] .
[16]:
id_vergunning diepte vergunningverlenende_overheid_VVO
0 69758 2.2 Gemeentebestuur GENT
1 64011 NaN Gemeentebestuur GENT
2 63640 3.0 Vlaams Gewest
3 63638 NaN Vlaams Gewest
4 63938 7.0 Gemeentebestuur GENT

Estimate groundwater quality data for a certain permit

Given groundwater scarcity in Belgium, the reuse of dewatering drainage is increasingly being considerd. In some cases, this water contains a high iron load which is not desirable for a lot of applications.
Determine the groundwater quality for a certain permit, e.g. for the permit at Diestsestraat 209 3000 Leuven.
[17]:
from pydov.util.location import Within, Box
from owslib.fes2 import PropertyIsEqualTo
import pandas as pd

query = PropertyIsEqualTo(propertyname='inrichtingsnummer',
                          literal='20181004-0018')
df_permit = gwv.search(query=query)
df_permit.head()
[000/001] .
[17]:
id_vergunning pkey_installatie x y diepte exploitant_naam watnr vlaremrubriek vergund_jaardebiet vergund_dagdebiet van_datum_termijn tot_datum_termijn aquifer_vergunning inrichtingsklasse nacebelcode actie_waakgebied cbbnr kbonr
0 64279 https://www.dov.vlaanderen.be/data/installatie... 174097.89 174672.54 11.0 Rialto Holding VLB-00133-A 53.2.2.a)<25 22450.0 445.0 2019-05-29 2023-03-16 A0620: Zand van Brussel Klasse 3 64200: Holdings NaN NaN 0675544028
The water is extracted from the hydrogeological layer ‘Zand van Brussel’ which is designated with the according HCOV code ‘0620’. We can now look in the data from the groundwater quality monitoring wells which wells are situated nearby for that specific hydrogeological layer. For this, we first have to look at the dataset comprising the head measurements, that also contains the HCOV code of the aquifer. Subsequently, we can fetch the water quality monitoring data of the selected well screens.
More information on the HCOV code can be found through this link.
[18]:
from pydov.search.grondwaterfilter import GrondwaterFilterSearch
from pydov.search.monster import MonsterSearch
from pydov.util.query import Join

gfs = GrondwaterFilterSearch()
fields = gfs.get_fields()

# print available fields
for f in fields.values():
    print(f['name'])

gw_id
pkey_grondwaterlocatie
filternummer
pkey_filter
namen
filtergrafiek
putgrafiek
Aquifer_HCOVv1
Aquifer_HCOVv2
diepte_onderkant_filter
lengte_filter
putsoort
filtertype
meetnet
x
y
start_grondwaterlocatie_mtaw
gemeente
grondwaterlichaam
afgesloten_volgens_gwdecreet
datum_in_filter
datum_uit_filter
stijghoogterapport
analyserapport
boornummer
boringfiche
peilmetingen_van
peilmetingen_tot
kwaliteitsmetingen_van
kwaliteitsmetingen_tot
recentste_exploitant
beheerder
aantal_dagen_sinds_laatste_meting
eerste_invoer
recentste_installatie
geom
meetnet_code
aquifer_code
grondwaterlichaam_code
regime
datum
tijdstip
peil_mtaw
betrouwbaarheid
methode
filterstatus
filtertoestand
mv_mtaw
[19]:
from pydov.search.grondwaterfilter import GrondwaterFilterSearch
from pydov.search.monster import MonsterSearch
from pydov.search.observatie import ObservatieSearch
from pydov.util.query import FuzzyJoin, PropertyInList

from owslib.fes2 import And

filter = GrondwaterFilterSearch()
monster = MonsterSearch()
observatie = ObservatieSearch()

# Find the groundwater screens
df_filters = filter.search(location=Within(Box(170000, 174000, 190000, 180000, epsg=31370)),
                    return_fields=['pkey_filter', 'x', 'y', 'Aquifer_HCOVv2', 'diepte_onderkant_filter'])

df_filters = df_filters[(df_filters['Aquifer_HCOVv2'].str.contains('0620'))]
df_filters.head()
[000/001] .
[19]:
pkey_filter x y Aquifer_HCOVv2 diepte_onderkant_filter
0 https://www.dov.vlaanderen.be/data/filter/1967... 170932.00 177130.00 0620 - Zand van Brussel 42.0
3 https://www.dov.vlaanderen.be/data/filter/2014... 171603.90 174596.62 0620 - Zand van Brussel 66.0
13 https://www.dov.vlaanderen.be/data/filter/2006... 171800.00 179870.00 0620 - Zand van Brussel NaN
19 https://www.dov.vlaanderen.be/data/filter/2024... 176420.07 176010.01 0620 - Zand van Brussel 37.1
20 https://www.dov.vlaanderen.be/data/filter/1900... 173804.20 175098.74 0620 - Zand van Brussel 24.0

Now select the according water quality data:

[20]:
# Find the samples linked to the groundwater screens
df_monsters = monster.search(
    query=FuzzyJoin(df_filters, on='pkey_parents', using='pkey_filter'),
    return_fields=['pkey_monster'])

# Find the iron observations linked to the samples
df_observaties = observatie.search(
    query=And([
        Join(df_monsters, on='pkey_parent', using='pkey_monster'),
        PropertyInList('parameter', [
            'Ijzer (Fe)',
            'Ijzer II (Fe2+)',
            'Ijzer III (Fe3+)',
            'Ijzer - Totaal (Fe(Tot.))'
        ])
    ])
)

# Make sure results are numeric
df_observaties['resultaat'] = pd.to_numeric(df_observaties.resultaat)

# Group stats per parameter
df_stat = df_observaties.loc[:, ['parameter', 'resultaat']].groupby('parameter').describe().unstack(1)
df_stat
[000/001] .
[000/001] .
[20]:
                  parameter
resultaat  count  Ijzer (Fe)         223.000000
                  Ijzer II (Fe2+)     75.000000
           mean   Ijzer (Fe)           1.412457
                  Ijzer II (Fe2+)      0.701560
           std    Ijzer (Fe)           1.929072
                  Ijzer II (Fe2+)      1.268594
           min    Ijzer (Fe)           0.000000
                  Ijzer II (Fe2+)      0.000000
           25%    Ijzer (Fe)           0.020000
                  Ijzer II (Fe2+)      0.020000
           50%    Ijzer (Fe)           0.164000
                  Ijzer II (Fe2+)      0.070000
           75%    Ijzer (Fe)           3.245000
                  Ijzer II (Fe2+)      0.649000
           max    Ijzer (Fe)          12.300000
                  Ijzer II (Fe2+)      4.400000
dtype: float64

Mind the units of the values.

[21]:
df_observaties.eenheid.unique()
[21]:
array(['mg/l'], dtype=object)

As such, the iron content of the considered hydrogeological layer is on average 1.4 mg/L with a stdev of 1.93 mg/L. This is most likely above the standards for use as irrigation water (see this link). Mind that further processing with a limited selection of the two nearest monitoring screens is possible. And even further, an indication of the nearest OVAM sites can be obtained from the WFS with (in Dutch) ‘Dossierinfo’ as available from this link.