Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Pandas โ€” Groeperen, aggregeren en samenvoegen

Wanneer je data per categorie wilt samenvatten โ€” bijv. gemiddelde fooi per dag, totale verkoop per product โ€” gebruik je groupby. Deze notebook behandelt:

  • .groupby() met aggregatiefuncties

  • .apply() met aangepaste functies en lambdaโ€™s

  • .map() voor waarde-mapping

  • Samenvoegen van DataFrames met pd.concat() en pd.merge()

Loading...

.groupby() โ€” Groeperen en aggregerenยถ

De groupby werkt in drie stappen: split โ†’ apply โ†’ combine.

  1. Verdeel het DataFrame in groepen op basis van een kolom

  2. Pas een aggregatiefunctie toe op elke groep

  3. Combineer de resultaten tot รฉรฉn DataFrame

Loading...
Loading...
Loading...
sex smoker Male Yes 3.05 No 3.11 Female Yes 2.93 No 2.77 Name: tip, dtype: float64
Loading...

.apply() โ€” Aangepaste functiesยถ

Wanneer een standaard aggregatie niet volstaat, gebruik je .apply() met een zelfgeschreven functie of een lambda.

Loading...
tip_category normal 178 generous 39 low 27 Name: count, dtype: int64
Loading...

.map() โ€” Waarden omzetten via een dictionaryยถ

Loading...

DataFrames samenvoegenยถ

pd.concat() โ€” Rijen of kolommen toevoegenยถ

      name  score
0    Alice     88
1      Bob     74
2  Charlie     92
3    Diana     81

pd.merge() โ€” Tabellen koppelen op een sleutelkolomยถ

merge() is het equivalent van een SQL JOIN.

Loading...
Loading...

Oefeningenยถ

Gebruik de Titanic-dataset: sns.load_dataset("titanic").

Oefening 1 โ€” Bereken het overlevingspercentage per klasse (pclass). (Tip: het gemiddelde van de kolom survived geeft het percentage, want 0 = niet overleefd, 1 = overleefd.)

Oefening 2 โ€” Bereken per combinatie van sex en pclass de gemiddelde leeftijd, de gemiddelde prijs (fare) en het aantal passagiers. Gebruik .agg() met benoemde aggregaties.

Oefening 3 โ€” Voeg een kolom age_category toe met de waarden "child" (< 18), "adult" (18โ€“60) of "senior" (> 60). Gebruik .apply() met een functie.

Oefening 4 โ€” Gebruik .map() om een kolom class_name te maken die pclass (1, 2, 3) omzet naar "First class", "Second class", "Third class".

Oefening 5 โ€” Voeg de Titanic-dataset samen met een fictief DataFrame van havens:

ports = pd.DataFrame({
    "embarked": ["S", "C", "Q"],
    "city":    ["Southampton", "Cherbourg", "Queenstown"],
    "country": ["UK", "France", "Ireland"],
})

Gebruik een left join op de kolom embarked. Hoeveel rijen hebben een NaN voor city na de join?