Groeperen en aggregeren met pandas

Leer een pandas-DataFrame in groepen te verdelen en elke groep samen te vatten. Groepeer op kolommen, afgeleide sleutels en indexniveaus; bereken ingebouwde, meervoudige en zelfgeschreven aggregaties; voeg met transform groepsstatistieken aan elke rij toe; ken rangnummers toe, filter en trek steekproeven binnen groepen; en gebruik apply voor de overige bewerkingen. Deel vervolgens getallen met cut en qcut in klassen in voor kwantielanalyse en maak draaitabellen en kruistabellen met totalen en percentages.

GemiddeldLes 5 van 8 in Cursus Data-analyse met Python: NumPy, pandas en visualisatie

Wat je leert

  1. Leg het patroon van splitsen, toepassen en combineren uit, maak GroupBy-objecten met verschillende soorten sleutels en bepaal de labels, volgorde en volledigheid van het gegroepeerde resultaat.
    • Leg splitsen, toepassen en combineren en het GroupBy-object uit
      Beschrijf wat er gebeurt wanneer pandas een DataFrame groepeert, inspecteer de gevormde groepen en selecteer de kolommen die je wilt samenvatten.
    • Groepeer op basis van kolommen, arrays, waardetoewijzingen, functies en indexniveaus
      Kies en combineer groeperingssleutels, van één of meer kolommen tot afgeleide sleutels, waardetoewijzingen, functies en indexniveaus.
    • Bepaal hoe groepssleutels, volgorde en ontbrekende sleutels in resultaten worden verwerkt
      Maak gegroepeerde resultaten geschikt voor verdere verwerking: sleutels als index of kolommen, gesorteerde uitvoer, ontbrekende sleutels en ongebruikte categorieën, en duidelijke namen.
  2. Breng elke groep terug tot samenvattende waarden met ingebouwde aggregaties, meerdere aggregaties in één aanroep en zelfgeschreven functies, en interpreteer de resultaten correct.
    • Gebruik ingebouwde aggregatiemethoden correct
      Bereken per groep aantallen, totalen, gemiddelden, spreidingsmaten en andere samenvattingen en weet hoe de methoden omgaan met ontbrekende waarden en tekstkolommen.
    • Pas met agg meerdere aggregaties tegelijk toe
      Gebruik agg met lijsten, dictionaries en aggregatie met benoemde uitvoerkolommen om samenvattingstabellen met duidelijke kolomnamen te maken.
    • Schrijf eigen aggregatiefuncties
      Schrijf eigen functies die een groep tot één waarde terugbrengen, benoem hun resultaten en weet wanneer een ingebouwde functie of een verhouding van sommen een betere keuze is.
  3. Voeg groepsresultaten aan elke rij toe, bereken cumulatieve en relatieve waarden binnen groepen, behoud groepen en rijen of trek er steekproeven uit, en gebruik apply voor bewerkingen die de andere methoden niet kunnen uitdrukken.
    • Voeg met transform groepsstatistieken aan elke rij toe
      Gebruik transform om groepsresultaten via broadcasting terug te plaatsen bij de oorspronkelijke rijen voor aandelen, afwijkingen, gestandaardiseerde waarden en het op basis van groepen aanvullen van ontbrekende gegevens.
    • Bereken cumulatieve totalen, rangnummers en veranderingen binnen groepen
      Gebruik cumulatieve methoden, rangnummering en verschuivingen die in elke groep opnieuw beginnen, en houd de rijen in de bedoelde volgorde.
    • Behoud of verwijder rijen per groep, of trek per groep een steekproef
      Filter hele groepen op een voorwaarde, neem de eerste, laatste of hoogste rijen van elke groep en trek aselecte steekproeven binnen groepen.
    • Voer algemene groepsbewerkingen uit met apply
      Gebruik apply voor groepsbewerkingen die meerdere kolommen nodig hebben of tabellen teruggeven, voorspel de vorm van het resultaat en geef waar mogelijk de voorkeur aan snellere methoden.
  4. Zet numerieke waarden met cut en qcut om in intervalcategorieën, bereken kwantielen en gebruik de klassen als groeperingssleutels voor analyses per klasse en op basis van kwantielen.
    • Deel waarden met cut in intervallen in
      Gebruik cut met expliciete grenzen of een aantal klassen met gelijke breedte, lees intervalnotatie en bepaal de grenzen, labels en verwerking van waarden buiten de klassen.
    • Maak met kwantielen en qcut klassen met gelijke aantallen waarnemingen
      Bereken kwantielen, maak met qcut klassen op basis van kwantielen, vergelijk die met klassen met gelijke breedte en verwerk gelijke waarden.
    • Vergelijk groepen op basis van klassen en kwantielen
      Gebruik de uitvoer van cut en qcut als groeperingssleutels voor analyses per klasse en op basis van kwantielen, behoud zo nodig lege klassen en interpreteer de resultaten zorgvuldig.
  5. Maak tweedimensionale samenvattingstabellen met pivot_table en crosstab, voeg totalen toe, zet aantallen om in aandelen en kies de tabel die de vraag beantwoordt.
    • Maak draaitabellen met pivot_table
      Vat waarden samen op rij- en kolomsleutels met pivot_table, kies de aggregatiefunctie en voeg opvulwaarden en totalen toe.
    • Tel en vergelijk categorieën met crosstab
      Maak met crosstab frequentietabellen van twee categorische variabelen, voeg totalen toe, zet aantallen om in aandelen binnen rijen, kolommen of het totaal en kies het aandeel dat de vraag beantwoordt.

Groeperen en aggregeren met pandas: uitleg

5 hoofdstukken

1

Verdeel gegevens in groepen met groupby

Een gegroepeerde analyse begint met een vraag zoals “Hoeveel eenheden heeft elke regio verkocht?” Je kiest de sleutels die een groep bepalen, selecteert de waarden die je wilt analyseren en bepaalt welke vorm het antwoord moet hebben. Dezelfde rijen kunnen dienen voor regionale totalen, productvergelijkingen of combinaties van beide. Als je sleutels, indexen en ontbrekende categorieën begrijpt, kun je die resultaten gemakkelijker inspecteren en in een rapport gebruiken.

1.1 Leg splitsen, toepassen en combineren en het GroupBy-object uit

Een groep bevat rijen met dezelfde sleutelwaarde. Als de sleutel region is, hoort elke bestelling uit North bij één groep, ook als die bestellingen verspreid door de tabel staan. Splitsen, toepassen en combineren betekent dat je deze groepen vaststelt, binnen elke groep dezelfde bewerking uitvoert en de resultaten samenvoegt.

Begin met de bestelgegevens

De voorbeelden gebruiken pandas 3 met import pandas as pd en NumPy als np. Maak de tabel met drankbestellingen:

sales = pd.DataFrame({
    "region": ["North", "South", "North", "East", "South", "East", "North", "South"],
    "product": ["tea", "tea", "coffee", "coffee", "coffee", "tea", "tea", "coffee"],
    "units": [10, 4, 7, 5, 9, 3, 6, 8],
    "revenue": [30, 12, 28, 20, 36, 9, 18, 32]
})

De omzet heeft hier geen munteenheid. Thee heeft een omzet van 3 per stuk en koffie van 4 per stuk. De standaardrijlabels lopen van 0 tot en met 7.

Van een GroupBy-object naar een antwoord

sales.groupby("region") geeft een GroupBy-object terug, dat de groeperingsinformatie bevat. Het is geen samenvattingstabel. Kies een kolom en roep een methode aan om een resultaat te berekenen:

g = sales.groupby("region")
totals = g["units"].sum()

East bevat rijen 3 en 5, dus het totaal is 5 + 3 = 8. North bevat rijen 0, 2 en 6, wat 10 + 7 + 6 = 23 geeft. South bevat rijen 1, 4 en 7, wat 4 + 9 + 8 = 21 geeft. pandas combineert deze tot een Series met de naam units, met de regionamen als index. De totalen tellen op tot 52, het oorspronkelijke kolomtotaal.

De standaardvolgorde van de uitvoer is East, North, South omdat groepssleutels worden gesorteerd. sales.groupby("region", sort=False) gebruikt de volgorde van eerste voorkomen: North, South, East. Geen van beide keuzes sorteert de waarnemingen binnen een groep of wijzigt sales.

Inspecteren en selecteren

g.ngroups is 3. g.size() rapporteert 2, 3 en 3 rijen voor East, North en South. g.groups koppelt sleutels aan rijlabels en g.get_group("North") geeft de drie rijen van North terug. Je kunt één groep tegelijk inspecteren:

for name, group in g:
    print(name, group["units"].tolist())

Het doorlopen van groepen helpt bij inspectie of export. Voor een statistiek voorkomt een ingebouwde groepsmethode dat je zelf een Python-lus moet schrijven en de resultaten moet verzamelen.

Als je g["units"] selecteert, krijg je een SeriesGroupBy; de som daarvan is een Series. Als je g[["units"]] selecteert, krijg je een DataFrameGroupBy; de som daarvan is een DataFrame met één kolom. Selecteer g[["units", "revenue"]] wanneer je beide numerieke kolommen nodig hebt.

Kies de vorm van de uitvoer

Een aggregatie zoals sum geeft één samenvattende waarde per groep en kolom. Een transformatie geeft een waarde voor elke invoerrij, zoals het aandeel van elke bestelling in het totaal van de regio. Een filtering behoudt geselecteerde rijen of groepen. De algemene methode apply verwerkt minder regelmatige groepsresultaten.

Filteren met sales[sales["region"] == "North"] haalt de rijen van één regio op. Door te groeperen kun je elke regio met dezelfde bewerking verwerken.

Belangrijkste punten

  • Groepssleutels bepalen welke rijen bij elkaar horen.
  • Een GroupBy-object heeft een bewerking nodig voordat het een resultaat oplevert.
  • Kies aggregatie, transformatie of filtering op basis van de uitvoer die je nodig hebt.
  • Groeperen behoudt de oorspronkelijke tabel en de rijvolgorde binnen elke groep.

1.2 Groepeer op basis van kolommen, arrays, waardetoewijzingen, functies en indexniveaus

Sleutels kunnen uit kolommen, berekeningen of de rijindex komen. De belangrijke vraag is welke waarde elke rij als sleutel krijgt. Rijen met dezelfde combinatie van sleutels worden samen verwerkt.

Gebruik meerdere kolommen

Geef een lijst met kolomnamen door om op combinaties te groeperen:

pair_totals = sales.groupby(["region", "product"])["units"].sum()

Het resultaat heeft een MultiIndex met twee niveaus. De vermeldingen zijn East–coffee 5, East–tea 3, North–coffee 7, North–tea 16, South–coffee 17 en South–tea 4. North–tea combineert de twee theebestellingen met 10 en 6 eenheden. Als je alleen op regio zou groeperen, zou de koffiebestelling uit North ook meetellen.

pair_totals.unstack() verplaatst het binnenste niveau product naar de kolommen. De rijen zijn regio's en de kolommen zijn coffee en tea. Een ontbrekende combinatie wordt NaN; unstack(fill_value=0) kan die als nul weergeven wanneer die afwezigheid betekent dat er geen eenheden zijn.

Gebruik een lijst voor meerdere kolomnamen. groupby(("region", "product")) behandelt de tuple als één kolomlabel en zoekt een kolom met die tuple als naam.

Leid een sleutel af uit waarden

Een booleaanse Series kan bestellingen op grootte verdelen zonder een kolom toe te voegen:

sales.groupby(sales["units"] >= 7)["revenue"].sum()

De groep True bevat aantallen 10, 7, 9 en 8; de omzet is 126. De groep False bevat de andere vier bestellingen en heeft een omzet van 59. De toets maakt groepslabels; die verwijdert de kleinere bestellingen niet.

Een waardetoewijzing kan regio's in zones samenvoegen:

zones = {"North": "Zone 1", "East": "Zone 1", "South": "Zone 2"}
zone_key = sales["region"].map(zones)
sales.groupby(zone_key)["units"].sum()

Zone 1 krijgt de 23 eenheden van North en de 8 van East, samen 31. Zone 2 krijgt de 21 van South. Wijs eerst de kolomwaarden toe: een dictionary die je rechtstreeks aan groupby doorgeeft, wijst indexlabels toe, geen regiowaarden.

Groepeer met de index

Een functie die je als sleutel doorgeeft, ontvangt ook indexlabels. Voor een voorraad met productcodes als index kan de eerste letter de productfamilie aanduiden:

stock = pd.Series([12, 8, 5, 9, 4],
                  index=["T01", "T02", "C01", "C02", "C03"])
stock.groupby(lambda code: code[0]).sum()

Het totaal van C is 18 en het totaal van T is 20. Bij een bestaande MultiIndex groepeert pair_totals.groupby(level="product").sum() opnieuw op het benoemde indexniveau, met coffee 29 en tea 23 als resultaat.

Controleer de uitlijning vóór het groeperen

Een NumPy-array als sleutel levert labels op positie en moet één element per rij hebben. Een Series als sleutel wordt op indexlabel uitgelijnd. Als de labels alleen rijen 0 en 1 omvatten, krijgen de andere rijen ontbrekende sleutels en worden ze bij het standaardgroeperingsgedrag weggelaten. Een Series met een gewijzigde volgorde kan nog steeds correct groeperen wanneer de labels overeenkomen; als je de Series vervangt door de waarden, verandert de bewerking in koppeling op positie.

Belangrijkste punten

  • Gebruik een lijst met kolomnamen om op combinaties te groeperen.
  • Een Series als sleutel wordt op indexlabel uitgelijnd; een array levert waarden op positie.
  • Wijs kolomwaarden vóór het groeperen toe wanneer een dictionary die waarden beschrijft.
  • Functies die je als sleutel doorgeeft, ontvangen indexlabels.
  • Gebruik level voor indexniveaus en unstack om een indexniveau naar kolommen te verplaatsen.
  • Een booleaanse sleutel verdeelt rijen in groepen op basis van een voorwaarde zonder een van beide groepen te verwijderen.

1.3 Bepaal hoe groepssleutels, volgorde en ontbrekende sleutels in resultaten worden verwerkt

Een gegroepeerde berekening heeft twee onderdelen die je moet inspecteren: de waarden en de labels eromheen. Met pandas kun je kiezen waar sleutels verschijnen, hoe groepen worden geordend en of ontbrekende of ongebruikte sleutels in het rapport verschijnen.

Behoud sleutels in de index of in kolommen

Standaard worden sleutels de index van het resultaat:

sales.groupby("region")["revenue"].sum()

Deze Series heeft East 29, North 76 en South 80. Gebruik voor een plat rapport:

report = sales.groupby("region", as_index=False)["revenue"].sum()

report heeft gewone kolommen region en revenue en een nieuwe index met gehele getallen. Als je .reset_index() op de oorspronkelijke Series aanroept, krijg je dezelfde indeling. Bij meerdere sleutels zet die methode elk MultiIndex-niveau om in een kolom. unstack() heeft een ander doel: die methode verplaatst een indexniveau naar de kolommen van een raster.

Een Series als resultaat behoudt de naam van de geselecteerde kolom. Gebruik .rename("total_revenue") voor een duidelijkere Series-naam of .to_frame("total_revenue") voor een DataFrame met één kolom. Aggregatie met benoemde uitvoerkolommen kan tijdens de berekening beschrijvende kolomnamen opleveren.

Sorteer sleutels of rangschik waarden

sort=True sorteert de sleutels, dus de alfabetische regiovolgorde blijft East, North, South, hoewel South de grootste omzet heeft. Sorteer het resultaat om totalen te rangschikken:

sales.groupby("region")["revenue"].sum().sort_values(ascending=False)

De uitvoer is South 80, North 76, East 29. Gebruik sort=False om de volgorde van eerste voorkomen van de sleutels te behouden en onnodig sorteren van sleutels in een grote dataset te vermijden. Dit sorteert de rijen binnen groepen niet.

Houd rekening met ontbrekende sleutels

De standaardinstelling dropna=True sluit rijen met een ontbrekende groepssleutel uit. Voeg een bestelling met 5 eenheden maar zonder regio toe: de volledige kolom met aantallen heeft nu een totaal van 57, terwijl de groepstotalen nog steeds optellen tot 52. De weggelaten rij heeft geen benoemde regio.

sales.groupby("region", dropna=False)["units"].sum()

Op de uitgebreide tabel voegt dit een groep voor ontbrekende sleutels toe met een totaal van 5. Ontbrekende sleutels bepalen of een rij in een groep terechtkomt; ontbrekende waarden bepalen wat een aggregatie binnen een groep telt of berekent. Dat zijn afzonderlijke beslissingen.

Toon ongebruikte categorieën wanneer dat nodig is

Een categorische kolom region kan East, North, South en West bevatten, ook als er geen bestellingen uit West zijn. Sinds pandas 3.0 is observed=True de standaardinstelling en worden alleen categorieën getoond die in de gegevens voorkomen. Met observed=False verschijnt West ook: de som en het aantal zijn 0, terwijl het gemiddelde NaN is.

Kies deze instelling expliciet wanneer een rapport telkens dezelfde categorieën moet tonen. Een ongebruikte categorie en een ontbrekende sleutel zijn verschillend: observed verwerkt vastgelegde categorische waarden; dropna verwerkt ontbrekende sleutelwaarden.

as_index en sort bepalen de vorm van aggregatieresultaten. Transformaties en filterbewerkingen zoals head, nth en filter behouden de indexen van de invoerrijen. Bij een rapport met sommen kun je de som van de groepstotalen vergelijken met het oorspronkelijke kolomtotaal om uitgesloten sleutels of een eerder filter op te sporen.

Belangrijkste punten

  • as_index=False plaatst aggregatiesleutels in gewone kolommen.
  • sort ordent sleutels; sort_values rangschikt berekende waarden.
  • dropna=False behoudt een groep voor ontbrekende sleutels.
  • observed=False neemt ongebruikte categorische waarden op.
2

Vat elke groep samen met aggregaties

Een samenvattingstabel brengt veel waarnemingen terug tot enkele bruikbare maten. Aantallen, totalen, gemiddelden en spreidingsmaten beantwoorden verschillende vragen, ook als ze dezelfde groepen gebruiken. Je kiest geschikte ingebouwde functies, verzamelt meerdere resultaten in één aanroep en schrijft zo nodig een eigen functie. Ontbrekende waarden en ongelijke groepsgroottes zijn van belang: een overzichtelijke tabel kan nog steeds de verkeerde vraag beantwoorden.

2.1 Gebruik ingebouwde aggregatiemethoden correct

Een aggregatie brengt elke groep terug tot een samenvattende waarde voor elke geselecteerde kolom. Kies de maat op basis van de vraag: een aantal rijen, een totaal, een gemiddelde of een spreidingsmaat beschrijft steeds een ander kenmerk van de gegevens.

Kies de statistiek

Veelgebruikte methoden zijn sum, prod, mean, median, min, max, count, size, nunique, std, var, first, last en quantile. Zowel een rechtstreekse aanroep zoals .mean() als .agg("mean") vraagt een groepsgemiddelde van pandas op. nunique() telt standaard unieke aanwezige waarden.

sales.groupby("product")["revenue"].agg(["mean", "median"])

De koffieomzetten zijn 28, 20, 36 en 32. Hun gemiddelde is 29; na sortering zijn de middelste waarden 28 en 32, dus de mediaan is 30. De theeomzetten zijn 30, 12, 9 en 18. Hun gemiddelde is 17,25 en de mediaan 15. De grote theebestelling van 30 trekt het gemiddelde boven de mediaan.

Tel rijen of vastgelegde waarden

size() telt rijen. count() telt aanwezige waarden in elke geselecteerde kolom. Als aantallen ontbreken voor rij 2 van North en rij 5 van East, blijven de groepsgroottes East 2, North 3, South 3, maar zijn de aantallen aanwezige waarden voor units 1, 2 en 3. Verschillende kolommen kunnen binnen dezelfde groep dus verschillende aantallen hebben.

De meeste numerieke reducties slaan ontbrekende waarden over. De resterende aantallen 10 en 6 van North hebben een gemiddelde van 8, berekend met twee vastgelegde waarden. Als je hun som door alle drie de rijen zou delen, krijg je het verkeerde gemiddelde. Een groep waarin alles ontbreekt, heeft standaard som 0 maar gemiddelde NaN. Sinds pandas 3.0 accepteren reducties zoals sum en mean skipna=False, zodat ze een ontbrekend resultaat teruggeven wanneer een groep een ontbrekende waarde bevat.

Interpreteer spreiding en gecombineerde samenvattingen

std() en var() gebruiken steekproefstatistieken, met ddof=1: de deler is één minder dan het aantal vastgelegde waarnemingen. De waarden 1 en 3 hebben een steekproefstandaardafwijking van ongeveer 1,414. Een groep met alleen de waarde 5 heeft een steekproefstandaardafwijking van NaN.

describe() bundelt aantal, gemiddelde, standaardafwijking, minimum, kwartielen en maximum. Voor de omzetten 12, 36 en 32 van South is het gemiddelde ongeveer 26,67 en de mediaan 32. De kolom 50% is de mediaan.

Bepaal de kolommen en rijvolgorde

Door numerieke kolommen te selecteren, voorkom je dat je tekst probeert te middelen:

sales.groupby("region")[["units", "revenue"]].mean()

Een .mean() op de hele tabel mislukt door de tekstkolom product; numeric_only=True is een andere oplossing. Een .sum() op de hele tabel kan tekst samenvoegen, wat voor East "coffeetea" oplevert, geen bruikbare productsamenvatting.

first() en last() kiezen per kolom de eerste en laatste aanwezige waarde in de huidige rijvolgorde. Ze kunnen waarden uit verschillende rijen nemen. Gebruik nth(0) om de werkelijke eerste rij op te halen, inclusief ontbrekende waarden; sorteer eerst wanneer “eerste” de vroegste betekent.

Ongelijke groepsgroottes beïnvloeden ook de interpretatie. Het gemiddelde van de regionale omzetgemiddelden is ongeveer 22,17, maar het totale gemiddelde is 185 gedeeld door 8, oftewel 23,125. Als je elk regiogemiddelde even zwaar laat wegen, krijgt de groep East met twee rijen evenveel invloed als elke groep met drie rijen.

Belangrijkste punten

  • size telt rijen; count telt vastgelegde waarden.
  • De meeste reducties slaan ontbrekende waarden over; een som waarbij alles ontbreekt, is standaard nul.
  • std en var gebruiken standaard de steekproefdeler.
  • Selecteer relevante numerieke kolommen voordat je aggregeert.
  • first kan ontbrekende waarden overslaan; nth(0) selecteert een werkelijke rij.
  • Ongelijke groepen hebben passende gewichten nodig wanneer je hun gemiddelden combineert.

2.2 Pas met agg meerdere aggregaties tegelijk toe

Een bruikbaar rapport heeft vaak meerdere maten uit dezelfde groepen nodig. Met agg, een afkorting van aggregate, kun je die maten samen opvragen en bepalen hoe hun uitvoerkolommen worden genoemd.

Geef één kolom meerdere functies
sales.groupby("region")["revenue"].agg(["sum", "mean", "max"])

East geeft 29; 14,5 en 20. North geeft 76; ongeveer 25,33 en 30. South geeft 80; ongeveer 26,67 en 36. Elke rij vertegenwoordigt één regio, terwijl de functienamen kolomnamen worden.

Een lijst die op meerdere waardekolommen wordt toegepast, levert hiërarchische kolommen op:

result = sales.groupby("region")[["units", "revenue"]].agg(["sum", "mean"])

De vier kolomlabels zijn de paren ("units", "sum"), ("units", "mean"), ("revenue", "sum") en ("revenue", "mean"). Het eerste niveau duidt de invoerkolom aan; het tweede duidt de berekening aan. Dit zijn kolomniveaus, los van eventuele groeperingsniveaus in de rijindex.

Wijs functies toe aan specifieke kolommen

Een dictionary selecteert de invoerkolommen en hun functies:

sales.groupby("region").agg({
    "units": "sum",
    "revenue": ["mean", "max"]
})

Dit vraagt het totale aantal eenheden op, maar de gemiddelde en maximale omzet. Kolommen die niet in de dictionary staan, verschijnen niet. Voor verschillende maten kunnen verschillende functies zinvol zijn; een hoeveelheid optellen en een frequentie middelen zijn geen uitwisselbare keuzes.

Benoem de uitvoer rechtstreeks

Aggregatie met benoemde uitvoerkolommen geeft elk resultaat een expliciete naam:

report = sales.groupby("region").agg(
    total_units=("units", "sum"),
    avg_revenue=("revenue", "mean")
)

Elk sleutelwoord benoemt een uitvoerkolom. De bijbehorende tuple bevat de bronkolom en de functie. total_units is 8, 23 en 21; avg_revenue is 14,5; ongeveer 25,33 en ongeveer 26,67. pd.NamedAgg(column="units", aggfunc="sum") is een alternatieve hulpfunctie om de bron en functie op te geven.

Gebruik na het selecteren van één Series functiesleutelwoorden zonder tuples met bronkolommen:

sales.groupby("region")["units"].agg(total="sum", most="max")

De totalen zijn 8, 23 en 21 en de maxima 5, 10 en 9. Een dictionary zoals {"total": "sum"} op deze geselecteerde Series geeft een SpecificationError; dit is niet de dictionaryvorm die op een DataFrame wordt gebruikt.

Een lijst met benoemde paren werkt ook op een geselecteerde kolom: .agg([("average", "mean"), ("spread", "std")]). Als je al MultiIndex-kolommen hebt die uit tekenreekslabels zijn gemaakt, maakt result.columns = ["_".join(col) for col in result.columns] die plat en ontstaan namen zoals units_sum.

Kies de functie bewust

Namen als tekenreeks gebruiken de ingebouwde groepsberekeningen van pandas. Sinds pandas 3.0 wordt een NumPy- of Python-functie die aan agg wordt doorgegeven, aangeroepen zoals opgegeven. Voor de omzetten 20 en 9 van East gebruikt "std" de steekproefdeler en geeft ongeveer 7,78, terwijl np.std de populatiedeler gebruikt en 5,5 geeft.

Belangrijkste punten

  • Een lijst past meerdere functies toe op de geselecteerde kolommen.
  • Een dictionary wijst functies toe aan specifieke invoerkolommen.
  • Aggregatie met benoemde uitvoerkolommen gebruikt uitvoernamen met paren (column, function).
  • Functienamen als tekenreeks en aanroepbare NumPy-objecten kunnen verschillende statistische standaardinstellingen gebruiken.

2.3 Schrijf eigen aggregatiefuncties

Een zelfgeschreven aggregatie drukt een samenvatting uit die een ingebouwde naam niet biedt. De functie ontvangt de waarden van één groep als Series en moet die terugbrengen tot één bruikbaar resultaat.

Schrijf de functie en geef die door
def value_range(s):
    return s.max() - s.min()

sales.groupby("region")["revenue"].agg(value_range)

De spreidingsbreedte van East is 20 min 9, oftewel 11. Die van North is 30 min 18, oftewel 12. Die van South is 36 min 12, oftewel 24. Geef value_range zelf door; value_range() zou de functie onmiddellijk aanroepen zonder de groeps-Series die nodig is.

Een lambda is geschikt voor een korte berekening:

sales.groupby("region")["revenue"].agg(
    share_20=lambda s: (s >= 20).mean()
)

Booleaanse waarden werken als 1 voor True en 0 voor False, dus hun gemiddelde is het aandeel dat aan de voorwaarde voldoet. East heeft één geschikte bestelling van de twee, oftewel 0,5. North en South hebben er elk twee van de drie, oftewel ongeveer 0,667. Door het resultaat te benoemen, maak je de betekenis duidelijker dan met een automatisch lambdalabel. Lijsten met meerdere functies geven lambda's de labels <lambda_0>, <lambda_1> enzovoort; een enkele lambda in een lijst krijgt het label <lambda>.

Bereid kolommen voor om snelle reducties te gebruiken

Een Python-functie wordt eenmaal voor elke groep uitgevoerd. Bij veel groepen zijn ingebouwde reducties meestal sneller. Je kunt de berekening van het aandeel herschrijven door eerst de booleaanse kolom te maken:

sales.assign(big=sales["revenue"] >= 20).groupby("region")["big"].mean()

De vergelijking wordt op de volledige kolom uitgevoerd, waarna pandas de groepsgemiddelden berekent.

Combineer twee kolommen via hun totalen

Een agg-functie verwerkt steeds één kolom. Voor de gemiddelde omzet per eenheid vat je eerst beide kolommen samen:

totals = sales.groupby("region")[["units", "revenue"]].sum()
avg_price = totals["revenue"] / totals["units"]

De resultaten zijn East 29/8 = 3,625, North 76/23 ≈ 3,304 en South 80/21 ≈ 3,810. Elke eenheid krijgt hetzelfde gewicht. Als je in plaats daarvan de bestelprijzen middelt, krijg je East 3,5, North ongeveer 3,333 en South ongeveer 3,667, omdat elke bestelling dan even zwaar weegt, ongeacht de omvang. Bepaal voordat je de formule kiest of de vraag over een typische eenheid of een typische bestelling gaat.

Houd de retourwaarde en ontbrekende gegevens duidelijk

Een functie die de twee kleinste waarden teruggeeft, maakt via agg geen twee gewone samenvattingsrijen; in pandas 3.1 slaat lambda s: s.nsmallest(2) een lijstachtig object in elke cel op. Gebruik apply wanneer een groep meerdere waarden of rijen moet teruggeven.

De ingevoerde Series bevat nog steeds ontbrekende waarden. s.mean() slaat die over, terwijl len(s) de rijen ervan telt. Als aantallen op rijen 2 en 5 ontbreken, geeft .agg(len) groepsgroottes 2, 3 en 3, niet de aantallen aanwezige waarden 1, 2 en 3.

Extra argumenten kunnen na de functie volgen: .agg("quantile", 0.9) geeft het 90e percentiel van elke groep. De omzetten 9 en 20 van East geven door lineaire interpolatie 18,9. De rechtstreekse aanroep .quantile(0.9) is voor deze ene bewerking gemakkelijker te lezen.

Belangrijkste punten

  • Geef een functie aan agg door zonder die eerst aan te roepen.
  • Een zelfgeschreven aggregatie ontvangt de Series van één groep en moet één samenvattende waarde teruggeven.
  • Gemiddelden van booleaanse waarden geven aandelen.
  • Een verhouding van totalen weegt eenheden anders dan een gemiddelde van verhoudingen per rij.
  • Geef de voorkeur aan ingebouwde reducties wanneer die de berekening uitdrukken.
  • Zelfgeschreven functies moeten bewust omgaan met ontbrekende waarden.
3

Transformeer en filter per groep en pas per groep functies toe

Een groep kan context bieden voor elke oorspronkelijke rij, niet alleen een afzonderlijke samenvatting. Een bestelling kan het totaal van de regio, het rangnummer of de verandering ten opzichte van de vorige bestelling uit die regio krijgen. Andere taken behouden geselecteerde groepen of geven een tabel per groep terug. Door een methode te kiezen op basis van de vorm van de uitvoer, maak je dit werk duidelijker en voorkom je fouten in de uitlijning op de index wanneer je een resultaat weer aan de oorspronkelijke gegevens toevoegt.

3.1 Voeg met transform groepsstatistieken aan elke rij toe

Een samenvatting heeft één rij per groep, maar soms heeft elke oorspronkelijke rij de statistiek van de eigen groep nodig. transform geeft een resultaat terug met de oorspronkelijke lengte en index, waardoor het geschikt is als nieuwe kolom.

Verspreid een totaal naar de juiste rijen
g = sales.groupby("region")["revenue"]
regional_total = g.transform("sum")
sales["share"] = sales["revenue"] / regional_total

De Series met totalen bevat 76, 80, 76, 29, 80, 29, 76 en 80 in de oorspronkelijke rijvolgorde. Het totaal van North, 76, wordt alleen op rijen van North herhaald. Rij 0 krijgt een aandeel van 30/76 ≈ 0,395; rij 3 van East krijgt 20/29 ≈ 0,690. Binnen elke regio tellen deze omzetaandelen op tot 1.

Als je g.sum() rechtstreeks zou toekennen, zouden de waarden niet met de rijen overeenkomen. De index bevat regionamen, terwijl sales rijlabels 0 tot en met 7 heeft. pandas lijnt uit op indexlabel, dus de toegekende kolom krijgt ontbrekende waarden. Gebruik transform of voeg een samenvatting expliciet samen op region.

Vergelijk een rij met de eigen groep

Door het groepsgemiddelde af te trekken, krijg je een afwijking van het groepsgemiddelde:

x = sales["revenue"]
deviation = x - g.transform("mean")

Rij 0 van North ligt ongeveer 4,67 boven het groepsgemiddelde van ongeveer 25,33. Rij 1 van South ligt ongeveer 14,67 onder het groepsgemiddelde van ongeveer 26,67. Elke vergelijking gebruikt de eigen regio van de rij, niet het gemiddelde van de hele tabel.

Een z-score deelt die afwijking door de standaardafwijking van de groep:

z = (x - g.transform("mean")) / g.transform("std")

Voor rij 0 van North is de steekproefstandaardafwijking ongeveer 6,43 en de z-score ongeveer 0,73. Rij 3 van East heeft een z-score van ongeveer 0,71 en ligt dus boven het gemiddelde van de regio, hoewel de omzet van 20 onder het totale gemiddelde van 23,125 ligt. Bij een standaardafwijking van nul of te weinig vastgelegde waarden is een gestandaardiseerde score niet gedefinieerd.

Vul een ontbrekende waarde aan vanuit de eigen groep

Stel dat de aantallen op rijen 2 en 5 ontbreken. De vastgelegde aantallen van North zijn 10 en 6, met gemiddelde 8; de enige vastgelegde waarde voor het aantal van East is 5.

with_missing = sales.copy()
with_missing.loc[[2, 5], "units"] = np.nan
means = with_missing.groupby("region")["units"].transform("mean")
filled_units = with_missing["units"].fillna(means)

In die gewijzigde tabel krijgt rij 2 de waarde 8 en rij 5 de waarde 5. Bestaande waarden blijven ongewijzigd. Wanneer groepen verschillende typische waarden hebben, kunnen hun eigen gemiddelden realistischere vervangingen bieden dan één totaal gemiddelde. Een groep zonder vastgelegde waarden heeft nog steeds geen gemiddelde om te gebruiken.

Begrijp een eigen transformatie

Een functie die je aan transform doorgeeft, kan een scalaire waarde teruggeven, die pandas binnen de groep herhaalt, of een Series met de rijen van de groep als index. Zo berekent g.transform(lambda s: s - s.mean()) dezelfde afwijkingen als het ingebouwde gemiddelde gevolgd door aftrekken, maar roept het voor elke groep Python aan.

Een teruggegeven kortere Series wordt op label gekoppeld. g.transform(lambda s: s.head(1)) levert alleen de waarde van de eerste rij in elke groep; de andere rijen krijgen NaN. Behoud bij berekeningen per rij de oorspronkelijke index wanneer je het resultaat weer aan de tabel wilt toekennen.

Belangrijkste punten

  • transform geeft resultaten terug die zijn uitgelijnd op de invoerrijen.
  • Deel elke waarde door het getransformeerde groepstotaal voor aandelen binnen de groep.
  • Gebruik groepsgemiddelden en standaardafwijkingen voor vergelijkingen binnen groepen.
  • Aanvullen op basis van groepen gebruikt de statistiek van de eigen groep van de rij met de ontbrekende waarde.

3.2 Bereken cumulatieve totalen, rangnummers en veranderingen binnen groepen

Cumulatieve berekeningen en vergelijkingen met eerdere waarnemingen hebben zowel een groep als een rijvolgorde nodig. Groeperen voorkomt dat een berekening naar een andere groep doorloopt; sorteren bepaalt wat “vorige” of “tot dan toe” betekent.

Accumuleer binnen elke groep

Ga ervan uit dat de bestelrijen al in tijdsvolgorde staan:

sales["running_units"] = sales.groupby("region")["units"].cumsum()

De aantallen 10, 7 en 6 van North geven cumulatieve totalen 10, 17 en 23. De aantallen 4, 9 en 8 van South geven 4, 13 en 21. De aantallen 5 en 3 van East geven 5 en 8. Deze waarden blijven gekoppeld aan hun oorspronkelijke rijlabels, dus de volledige uitvoer in rijvolgorde is 10, 4, 17, 5, 13, 8, 23 en 21.

Zonder groupby zou sales["units"].cumsum() één totaal over alle bestellingen geven: 10, 14, 21, 26, 35, 38, 44 en 52. De gegroepeerde berekening begint voor elke regio opnieuw. Verwante methoden zijn cumprod, cummax en cummin voor cumulatieve producten, maxima en minima.

cumcount() telt posities binnen groepen vanaf nul. Hier geeft het 0, 0, 1, 0, 1, 1, 2 en 2. Tel er 1 bij op voor het eerste, tweede en derde bestelnummer binnen elke regio.

Ken rangnummers toe zonder rijen te verplaatsen
sales.groupby("region")["revenue"].rank(ascending=False)

De grootste omzet krijgt rangnummer 1 in de eigen regio: rij 0 van North, rij 4 van South en rij 3 van East. De uitvoer behoudt de invoerindex; rangnummering verplaatst de grootste rijen niet naar de bovenkant van de tabel.

Standaard krijgen gelijke waarden het gemiddelde van hun rangnummers. Als twee waarden de eerste plaats delen, krijgen beide 1,5 en krijgt de volgende 3. method="min" geeft de gelijke waarden 1 en de volgende nog steeds 3. method="dense" geeft de gelijke waarden 1 en de volgende 2. Kies een regel voor gelijke waarden die past bij de interpretatie van de rangnummers.

Vergelijk opeenvolgende waarden
g = sales.groupby("region")["units"]
previous = g.shift(1)
change = g.diff()
relative_change = g.pct_change()

De vorige waarden van North zijn ontbrekend, 10 en 7. De verschillen zijn ontbrekend, −3 en −1. De relatieve veranderingen zijn ontbrekend, −0,3 en ongeveer −0,143: het verschil wordt gedeeld door de vorige waarde. pct_change() geeft een fractie terug, dus −0,3 betekent een daling van 30%, niet van 0,3%.

De eerste waarneming van elke groep heeft geen vorige waarneming en krijgt NaN. Een gewone shift() op de kolom zou de vorige rij van de hele tabel gebruiken, die bij een andere regio kan horen.

Sorteer vóór deze volgordeafhankelijke berekeningen de rijen op de kolom die de volgorde bepaalt, zoals een datum of gebeurtenisnummer. groupby(sort=True) sorteert alleen groepssleutels; het kan waarnemingen niet chronologisch ordenen. Rangnummering vergelijkt waarden en verwerkt gelijke waarden onafhankelijk van de chronologie, terwijl cumulatieve berekeningen en berekeningen met vertraagde waarden afhangen van de gekozen volgorde.

Belangrijkste punten

  • Sorteer waarnemingen vóór berekeningen die van hun volgorde afhangen.
  • Gegroepeerde cumulatieve methoden beginnen binnen elke groep opnieuw.
  • cumcount begint bij nul; tel er 1 bij op voor gewone volgnummers.
  • Kies zo nodig expliciet de richting van de rangnummering en de methode voor gelijke waarden.
  • shift, diff en pct_change vergelijken waarnemingen binnen dezelfde groep.
  • pct_change geeft een fractie terug die je met 100 kunt vermenigvuldigen voor een percentage.

3.3 Behoud of verwijder rijen per groep, of trek per groep een steekproef

Een groep behouden en een groep samenvatten zijn verschillende bewerkingen. Een groepsfilter gebruikt een voorwaarde voor de hele groep om te bepalen welke oorspronkelijke rijen blijven; rijselectiemethoden kiezen specifieke waarnemingen uit elke groep.

Behoud hele groepen
sales.groupby("region").filter(lambda g: len(g) >= 3)

North en South hebben elk drie bestellingen, terwijl East er twee heeft. Het resultaat bevat rijen 0, 1, 2, 4, 6 en 7, in de oorspronkelijke volgorde en met hun oorspronkelijke labels. Het geeft geen twee regionale samenvattingsrijen terug.

De voorwaarde moet voor elke groep één booleaanse waarde opleveren. lambda g: g["units"] > 5 levert een booleaanse Series op en is ongeldig voor filter. Breng die voorwaarde terug tot één waarde met all() of any():

sales.groupby("region").filter(lambda g: (g["units"] > 5).all())

Alleen North voldoet, omdat alle aantallen, 10, 7 en 6, groter zijn dan 5. Met any() behoud je ook South, omdat minstens één bestelling daar meer dan 5 eenheden heeft.

Een getransformeerde groepsgrootte levert voor de eerste taak een sneller masker dat op de rijen is uitgelijnd:

sizes = sales.groupby("region")["units"].transform("size")
sales[sizes >= 3]

Dit masker kun je met & en | combineren met andere rijvoorwaarden. Als je in plaats daarvan sales.groupby("region")["revenue"].sum() zou filteren, zou je samenvattingswaarden behouden, niet de oorspronkelijke bestellingen.

Neem rijen op positie

head(n) neemt de eerste n rijen per groep, tail(n) de laatste n en nth(k) de rij op positie k, geteld vanaf nul. sales.groupby("region").head(1) geeft rijen 0, 1 en 3 terug: de eerst waargenomen bestelling uit elke regio. Door ontbrekende waarden zoekt head(1) niet naar een latere rij zonder ontbrekende waarde.

Om de grootste bestelling per regio te selecteren, sorteer je eerst op omzet:

sales.sort_values("revenue", ascending=False).groupby("region").head(1)

De geselecteerde rijen zijn rij 4 van South met omzet 36, rij 0 van North met 30 en rij 3 van East met 20. Het sorteren bepaalt welke waarneming eerst komt; de groepsbewerking neemt vervolgens die eerste rij. Bij unieke rijlabels haalt sales.loc[sales.groupby("region")["revenue"].idxmax()] dezelfde maxima op via hun labels.

Trek binnen elke groep een steekproef
sales.groupby("region").sample(n=1, random_state=0)

Dit trekt één bestelling uit elke regio. Door random_state in te stellen, leveren herhaalde uitvoeringen op dezelfde gegevens dezelfde trekking op. Een steekproef uit het hele DataFrame zou een regio kunnen missen, zelfs als die in totaal drie rijen heeft.

Gebruik frac=0.5 om ongeveer de helft van de rijen in elke groep te trekken. De steekproefgrootte per groep wordt afgerond: met frac=0.2 leveren de twee rijen van East 0,4 rijen op, afgerond naar nul. Gebruik expliciet n=1 wanneer elke niet-lege groep één waarneming moet bijdragen. De gevraagde steekproefgrootte moet voor de groepen haalbaar zijn bij de gekozen steekproefinstellingen.

Belangrijkste punten

  • filter geeft oorspronkelijke rijen terug uit groepen die aan hun enkele booleaanse voorwaarde voldoen.
  • head, tail en nth selecteren rijen in de huidige volgorde.
  • Sorteer vóór head wanneer je de hoogste waarden selecteert.
  • Bij steekproeftrekking per groep met n=1 is elke niet-lege groep vertegenwoordigd; een kleine fractie kan kleine groepen weglaten.

3.4 Voer algemene groepsbewerkingen uit met apply

Met apply kan een functie een hele groep bekijken en een scalaire waarde, een Series of een DataFrame teruggeven. Die flexibiliteit is handig wanneer kolommen samen nodig zijn of het resultaat meerdere rijen bevat. Daardoor is de vorm van het resultaat ook minder voorspelbaar dan bij agg of transform.

Gebruik meerdere kolommen samen
def price_per_unit(g):
    return g["revenue"].sum() / g["units"].sum()

sales.groupby("region").apply(price_per_unit)

De functie ontvangt de rijen van één regio. Ze geeft één waarde terug, dus pandas combineert de uitvoer tot een Series met regio's als index: East 3,625, North ongeveer 3,304 en South ongeveer 3,810. Een verhouding van ingebouwde gegroepeerde sommen geeft hetzelfde resultaat met minder extra werk in Python. np.average(g["revenue"] / g["units"], weights=g["units"]) drukt het equivalente gewogen gemiddelde uit.

Voor een statistiek met twee kolommen, zoals de correlatie tussen studie-uren en score binnen elke lesgroep, kan apply de twee Series van elke groep aan .corr() doorgeven.

Voorspel hoe uitvoer wordt gecombineerd

Een functie die voor elke groep een Series met dezelfde labels teruggeeft, maakt één tabelrij per groep:

sales.groupby("region").apply(
    lambda g: pd.Series({
        "orders": len(g),
        "avg_price": g["revenue"].sum() / g["units"].sum()
    })
)

De kolommen zijn orders en avg_price. De aantallen verschijnen als 2.0, 3.0 en 3.0 omdat de teruggegeven Series ook een prijs als drijvendekommagetal bevat. Als de teruggegeven Series verschillende labels gebruiken, stapelt pandas ze tot een langere Series, met groepssleutels als buitenste indexniveau.

Een DataFrame per groep wordt gestapeld tot een groter DataFrame:

def top(g, n=2, col="revenue"):
    return g.sort_values(col, ascending=False).head(n)

sales.groupby("region").apply(top)

De rijen zijn East 3 en 5, North 0 en 2 en South 4 en 7. Elke groep wordt afzonderlijk gesorteerd. Extra argumenten volgen na de functie: .apply(top, n=1, col="units") wijzigt de selectie naar de bestelling met het grootste aantal eenheden.

Bepaal sleutels en uitlijning

Voor deze teruggegeven rijen voegt de standaardinstelling group_keys=True de regio toe als buitenste indexniveau. sales.groupby("region", group_keys=False).apply(top) behoudt alleen de oorspronkelijke rijlabels. De methode stelt het resultaat nog steeds groep voor groep samen; de rijvolgorde van de invoertabel is niet gegarandeerd.

Sinds pandas 3.0 sluit het DataFrame dat aan een gegroepeerde apply wordt doorgegeven de groeperingskolommen uit. In dit voorbeeld heeft het product, units en revenue, maar niet region. Lees de huidige groepssleutel uit g.name wanneer de functie die nodig heeft.

Gebruik een specifiekere methode wanneer die past

apply voert voor elke groep Python-code uit en leidt af hoe de uitvoer moet worden samengesteld. Gebruik agg voor samenvattende waarden per kolom, transform voor resultaten die op elke invoerrij zijn uitgelijnd en filter om te beslissen of hele groepen worden behouden of verwijderd.

Als je bijvoorbeeld via apply op een geselecteerde Series het gemiddelde van elke regio aftrekt, krijg je verschillen onder een MultiIndex met regio en rij. transform geeft de verschillen terug met de oorspronkelijke index, klaar om als kolom toe te kennen.

Belangrijkste punten

  • apply kan meerdere kolommen gebruiken en resultaten in uiteenlopende vormen teruggeven.
  • Een scalair resultaat geeft een Series; overeenkomende Series-labels geven een tabel.
  • DataFrame-resultaten worden gestapeld, meestal met groepssleutels in de index.
  • Sinds pandas 3.0 sluit gegroepeerde apply groeperingskolommen uit van elke invoergroep.
  • Geef de voorkeur aan agg, transform of filter wanneer hun resultaatvorm past.
  • Gebruik group_keys om buitenste groepslabels te bepalen, niet om de oorspronkelijke rijvolgorde te herstellen.
4

Deel numerieke gegevens in klassen in en analyseer groepen op basis van klassen en kwantielen

Numerieke waarden kunnen bruikbare groepslabels worden wanneer je ze in intervallen verdeelt. Met vaste grenzen kun je dezelfde bereiken tussen rapporten vergelijken; met kwantielen kun je lagere en hogere delen van een steekproef vergelijken. Je maakt beide soorten klassen, inspecteert grenzen en gelijke waarden en vat daarbinnen een andere variabele samen. Aantallen naast de samenvattingen laten zien hoeveel gegevens elke vergelijking ondersteunen.

4.1 Deel waarden met cut in intervallen in

Klasse-indeling, ook discretisatie genoemd, vervangt numerieke waarden door intervalcategorieën. Gebruik die wanneer een rapport betekenisvolle bereiken nodig heeft, zoals scoreklassen, in plaats van een afzonderlijke groep voor elk getal.

Stel expliciete grenzen in
scores = pd.Series([42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97, 100])
bands = pd.cut(scores, [0, 50, 70, 85, 100])
bands.value_counts(sort=False)

Vijf grenzen bepalen vier klassen: (0, 50], (50, 70], (70, 85] en (85, 100]. Ze bevatten 2, 4, 3 en 3 scores. Expliciete grenzen kunnen ongelijke breedtes opleveren omdat ze betekenisvolle grenzen beschrijven.

Een rond haakje sluit een grenspunt uit en een vierkant haakje sluit het in. Met de standaardinstelling right=True hoort 50 in de eerste klasse, 70 in de tweede, 85 in de derde en 100 in de vierde. Lees (50, 70] als “groter dan 50 en hoogstens 70”.

Verwerk de buitenste grenzen

Met deze expliciete grenzen is 0 uitgesloten van het eerste interval en ligt 101 voorbij het laatste interval. Beide krijgen NaN. Gebruik include_lowest=True om een waarde op te nemen die gelijk is aan de laagste grens. Waarden onder de laagste grens of boven de hoogste krijgen nog steeds geen klasse.

Gebruik right=False voor links gesloten intervallen. Dezelfde grenzen bepalen dan [0, 50), [50, 70), [70, 85) en [85, 100). Nu gaat 50 naar de tweede klasse en is 100 uitgesloten. De aantallen in het voorbeeld worden 1, 4, 3 en 3, met één ontbrekende klassetoewijzing. Een bovengrens van 101 zou de score 100 opnemen in de laatste links gesloten klasse.

Als je de inclusie van grenzen verandert, verandert de indeling van waarden op een grens. Controleer een minimum, een binnengrens en een maximum voordat je de klassen in een rapport gebruikt.

Voeg leesbare labels toe
bands = pd.cut(
    scores, [0, 50, 70, 85, 100],
    labels=["fail", "pass", "merit", "distinction"]
)

Geef één label per interval op: vier labels voor vijf grenzen. De uitvoer is een geordende categorische variabele, dus de volgorde is fail, pass, merit, distinction, niet alfabetisch. labels=False geeft voor toegewezen waarden in plaats daarvan klassecodes 0 tot en met 3 terug.

value_counts() sorteert normaal op frequentie. Gebruik sort=False of sorteer de resulterende index om de intervalvolgorde te behouden. Anders kan de meest voorkomende klasse eerst verschijnen en de verdeling moeilijker leesbaar maken.

Vraag pandas om gelijke breedtes

Als je een geheel getal doorgeeft, vraag je dat aantal klassen met gelijke breedte op:

bands, edges = pd.cut(scores, 4, retbins=True)

Het bereik van 42 tot 100 beslaat 58, wat breedtes van 14,5 geeft. De binnengrenzen zijn 56,5, 71,0 en 85,5. pandas verlengt de onderkant iets voor deze rechts gesloten klassen en geeft een eerste grens van 41,942, zodat het minimum wordt opgenomen. Elke klasse bevat hier toevallig drie scores; gelijke breedtes leveren doorgaans geen gelijke aantallen op.

retbins=True geeft zowel de werkelijke grenzen als de toewijzingen terug. Expliciete grenzen moeten oplopen: [0, 70, 50, 100] kan de bedoelde volgorde van intervallen niet bepalen.

Belangrijkste punten

  • cut zet numerieke waarden om in intervalcategorieën.
  • Standaard sluiten klassen de linkergrens uit en nemen ze de rechtergrens op.
  • Bij expliciete grenzen worden waarden buiten het bereik niet toegewezen.
  • include_lowest=True neemt de laagste expliciete grens op.
  • Een geheel getal als aantal klassen vraagt om gelijke breedtes, niet om gelijke aantallen.
  • Labels en aantallen moeten de bedoelde intervalvolgorde behouden.
  • right=False verandert welk grenspunt bij elk interval hoort; controleer het maximum na die wijziging.

4.2 Maak met kwantielen en qcut klassen met gelijke aantallen waarnemingen

Een kwantiel beschrijft een positie in gesorteerde gegevens. De mediaan is het 0,5-kwantiel; kwartielen verdelen de verdeling in kwarten, decielen in tienden en percentielen in honderdsten. qcut gebruikt steekproefkwantielen als klassengrenzen.

Bereken een kwantiel

Voor de scores 42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97 en 100:

scores.quantile([0.25, 0.5, 0.75])

De resultaten zijn 61,75, 71,5 en 85,75. pandas gebruikt standaard lineaire interpolatie. Voor het 0,25-kwantiel is de positie, geteld vanaf nul:

0,25(12−1)=2,75

Positie 2 bevat 55 en positie 3 bevat 64. Neem driekwart van de afstand ertussen:

55+0,75(64−55)=61,75

Een steekproefkwantiel kan dus tussen waargenomen waarden liggen. Het hoeft niet gelijk te zijn aan een score die iemand daadwerkelijk heeft behaald.

Maak kwantielgroepen
quartile = pd.qcut(scores, 4, labels=["Q1", "Q2", "Q3", "Q4"])

Deze steekproef geeft drie scores per kwartielgroep. De binnengrenzen zijn de drie berekende kwartielen. Het eerste interval bevat het minimum; de intervalweergave past het onderste label aan tot iets onder 42. Gebruik labels=False voor codes 0 tot en met 3 of retbins=True om de numerieke grenzen op te halen.

Een lijst met aandelen bepaalt de kwantielbereiken. pd.qcut(x, [0, 0.1, 0.5, 0.9, 1]) scheidt de laagste 10%, twee middendelen gescheiden door de mediaan en de hoogste 10%.

Kies breedtes of aantallen
MethodeWat bepaalt de grenzen?Wat blijft vergelijkbaar?
cut(x, n)Gelijke intervallen over het waargenomen bereikNumerieke breedte
cut(x, edges)Expliciet opgegeven grenzenDe gekozen bereiken
qcut(x, n)Kwantielen van deze steekproefAantallen waarnemingen bij benadering

Levertijden van 5, 6, 7, 7, 8, 9, 10, 12, 15, 20, 35 en 60 minuten laten het verschil zien. Drie klassen met gelijke breedte bevatten 10, 1 en 1 waarnemingen. Drie kwantielklassen bevatten elk 4 waarnemingen, met binnengrenzen rond 7,67 en 13 minuten. Lange vertragingen rekken het bereik van de klassen met gelijke breedte uit, waardoor de meeste waarnemingen in de eerste klasse vallen.

Gebruik vaste grenzen wanneer dezelfde tijdbereiken tussen datasets moeten worden vergeleken. Kwantielgrenzen veranderen wanneer de steekproef verandert.

Houd gelijke waarden zichtbaar

Voor de waarden 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 10 en 12 zijn de kwartielgrenzen 3,75, 6 en 8,25. Beide waarden van 6 horen bij elkaar, dus de klassenaantallen zijn 3, 4, 2 en 3. Een klasse-indeling met gelijke aantallen is bij gelijke waarden een benadering.

Bij veel gelijke waarden kunnen kwantielgrenzen samenvallen. Voor 1, 1, 1, 1, 1, 1, 2 en 3 levert het opvragen van kwartielen herhaalde grenzen op. duplicates="drop" verwijdert dubbele grenzen en laat slechts twee klassen over, met aantallen 6 en 2. Door eerst rangnummers toe te kennen met rank(method="first") kun je vier even grote groepen afdwingen, maar worden gelijke waarden op rijvolgorde verdeeld. Daardoor verandert de betekenis van waarde-intervallen naar groepen op basis van rangnummers waarbij gelijke waarden zijn onderscheiden.

Belangrijkste punten

  • Kwantielen kunnen tussen waarnemingen liggen doordat pandas interpoleert.
  • qcut gebruikt steekproefkwantielen om groepen met ongeveer gelijke aantallen te maken.
  • Gebruik vaste cut-grenzen voor bereiken die tussen datasets vergelijkbaar moeten blijven.
  • Gelijke waarden kunnen ongelijke aantallen in kwantielklassen of dubbele grenzen opleveren.
  • Dubbele grenzen verwijderen vermindert het aantal klassen; eerst rangnummers toekennen verdeelt gelijke waarden.

4.3 Vergelijk groepen op basis van klassen en kwantielen

Een klasselabel kan als groepssleutel dienen. Zo kun je vragen hoe één variabele verandert over bereiken van een andere, zoals de gemiddelde examenscore per klasse van studie-uren. De samenvatting beschrijft de waarnemingen in elke klasse.

Maak een samenvatting per klasse

Maak de studentgegevens:

students = pd.DataFrame({
    "group": ["day", "evening", "day", "evening", "day", "evening", "day", "evening", "day", "day", "evening", "day"],
    "hours": [2, 3, 3, 5, 4, 6, 6, 8, 7, 9, 10, 12],
    "score": [42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97, 100]
})
hour_band = pd.cut(students["hours"], [0, 3, 6, 9, 12])
students.groupby(hour_band)["score"].agg(["count", "mean"])

De vier klassen bevatten 3, 4, 3 en 2 studenten. Hun gemiddelde scores zijn 49, 68,75, ongeveer 84,67 en 98,5. In de eerste klasse zijn de scores 42, 50 en 55; hun gemiddelde is 147/3 = 49. Het aantal toont hoeveel vastgelegde scores elk gemiddelde ondersteunen.

De Series met klassen heeft één element per student en dezelfde index, zodat de toewijzingen tijdens het groeperen met de rijen overeenkomen. De numerieke kolom hours blijft beschikbaar voor andere berekeningen.

Behoud lege klassen wanneer een rapport die nodig heeft

Sinds pandas 3.0 is observed=True de standaardinstelling voor groepering met categorische sleutels. Voeg een grens van 15 toe en de ongebruikte klasse (12, 15] wordt weggelaten. observed=False behoudt die met aantal 0 en gemiddelde NaN. Nul studenten is een aantal; een gemiddelde van nul zou ten onrechte suggereren dat waargenomen scores gemiddeld nul zijn.

Klassen zijn geordende categorieën, dus de normale gegroepeerde uitvoer volgt de intervalvolgorde van laag naar hoog. Benoemde labels behouden de volgorde die aan hun intervallen is toegekend.

Analyseer kwantielgroepen en combinaties
quartile = pd.qcut(students["hours"], 4,
                   labels=["Q1", "Q2", "Q3", "Q4"])
students.groupby(quartile)["score"].agg(["count", "min", "max", "mean"])

De aantallen zijn 3, 4, 2 en 3, met gemiddelde scores 49, 68,75, 83 en 95. De gelijke waarden van 6 verklaren de ongelijke aantallen. Om dag- en avondstudenten binnen elk kwartiel te vergelijken, groepeer je op [quartile, "group"] en roep je .mean().unstack() aan. De gemiddelden voor Q1 zijn day 48,5 en evening 50; voor Q4 zijn ze day 94 en evening 97.

De richting van de analyse doet ertoe. Studie-uren groeperen op scoreklassen beantwoordt een andere vraag: de gemiddelde uren voor de klassen fail, pass, merit en distinction zijn 2,5, 4,5, 7 en ongeveer 10,33.

Bepaal welke populatie een kwantiel vastlegt

Een indeling van de scores op de totale mediaan gebruikt 71,5. Een indeling binnen elke lesgroep gebruikt de eigen mediaan: daggroep 73 en avondgroep 70.

within_class = students.groupby("group")["score"].transform(
    lambda s: pd.qcut(s, 2, labels=["lower", "upper"])
)

De student uit de daggroep met score 73 zit boven de totale mediaan, maar hoort binnen de daggroep bij de onderste helft. Beide labels zijn correct omdat ze verschillende vergelijkingsvragen beantwoorden.

Een stijgend gemiddelde over klassen van uren is een samenhang. Studenten in verschillende klassen kunnen ook op andere manieren verschillen, dus de tabel alleen kan niet aantonen dat extra studietijd het scoreverschil heeft veroorzaakt. Kleine aantallen maken een gemiddelde ook gevoeliger voor één waarneming.

Belangrijkste punten

  • Gebruik een Series met klassen als groepssleutel om een andere variabele samen te vatten.
  • Vermeld aantallen naast gemiddelden zodat zichtbaar is hoeveel gegevens die ondersteunen.
  • observed=False behoudt lege klassen met aantallen nul en ontbrekende gemiddelden.
  • Totale kwantielen en kwantielen binnen groepen gebruiken verschillende referentiepopulaties.
  • Patronen over klassen beschrijven samenhang en kunnen gevoelig zijn voor kleine steekproeven.
5

Vat gegevens samen in draaitabellen en kruistabellen

Een tweedimensionale tabel maakt combinaties van categorieën gemakkelijk vergelijkbaar. Een draaitabel vat op elk snijpunt van rij en kolom een numerieke waarde samen, terwijl een kruistabel meestal waarnemingen telt. Totalen en aandelen voegen context toe, maar hun betekenis hangt af van de aggregatie en de noemer. Je maakt beide tabellen en leest elke cel als antwoord op een precieze vraag.

5.1 Maak draaitabellen met pivot_table

Een draaitabel vat waarden samen voor combinaties van rij- en kolomsleutels. Elke cel verzamelt de waarnemingen op één snijpunt en past een functie toe, zoals een som of gemiddelde.

Wijs de rollen expliciet toe
sales.pivot_table(
    index="region", columns="product",
    values="revenue", aggfunc="sum"
)

index levert de rijsleutels, columns de kolomsleutels, values de gemeten variabele en aggfunc de berekening. De tabel is:

Regiocoffeetea
East209
North2848
South6812

North–tea combineert omzetten 30 en 18, dus de som is 48. South–coffee combineert 36 en 32, wat 68 geeft. Dezelfde gegevens kun je samenvatten met sales.groupby(["region", "product"])["revenue"].sum().unstack().

De standaardwaarde van aggfunc is "mean". Als je die weglaat, krijg je North–tea 24 en South–coffee 34. Geef aggfunc="sum" op wanneer de vraag om totalen vraagt; de indeling van een tabel vertelt niet welke statistiek die bevat.

Vul ontbrekende combinaties zorgvuldig aan

Combinaties zonder waarnemingen verschijnen als NaN. Verwijder de theebestelling van East en die cel wordt ontbrekend. fill_value=0 kan in een rapport met sommen of aantallen weergeven dat er geen bestellingen zijn. Als je bij een gemiddelde een lege cel door 0 vervangt, suggereert dat een waargenomen gemiddelde dat nooit is gemeten. Behoud de ontbrekende status wanneer er geen gemiddelde bestaat.

Categorische sleutels volgen de keuze voor observed; sinds pandas 3.0 toont de standaardinstelling waargenomen categorieën. Stel die expliciet in wanneer een rapport ongebruikte categorieën moet behouden.

Voeg randtotalen toe met dezelfde functie
sales.pivot_table(
    index="region", columns="product", values="revenue",
    aggfunc="sum", margins=True, margins_name="Total"
)

De rijtotalen zijn East 29, North 76 en South 80. De kolomtotalen zijn coffee 116 en tea 69; het eindtotaal is 185. margins_name vervangt het standaardlabel All.

Randtotalen worden met de aggregatiefunctie opnieuw uit de onderliggende rijen berekend. Bij een draaitabel met gemiddelden is de hoekcel 23,125, het gemiddelde van alle acht bestellingen. Het middelen van de zes weergegeven celgemiddelden zou ongeveer 21,17 geven, omdat de cellen verschillende aantallen waarnemingen bevatten. Een randtotaal is geen algemene opdracht om de getoonde getallen op te tellen of te middelen.

Breid de tabel uit of tel

aggfunc=["sum", "mean"] maakt voor elke statistiek een blok kolommen. Met units heeft North–tea som 16 en gemiddelde 8. Een functiedictionary zoals {"units": "sum", "revenue": "max"} wijst functies toe aan afzonderlijke waardekolommen. Meerdere sleutels kunnen ook hiërarchische rijen of kolommen maken en in klassen ingedeelde waarden werken als categorische sleutels.

aggfunc="size" telt rijen per cel, terwijl "count" aanwezige waarden in de gekozen waardekolom telt. North heeft één koffiebestelling en twee theebestellingen.

pivot aggregeert niet en vereist unieke rij- en kolomcombinaties. De verkooptabel heeft herhaalde combinaties North–tea en South–coffee, dus pivot geeft een fout over dubbele vermeldingen. Gebruik pivot_table wanneer meerdere waarnemingen in één cel moeten worden gecombineerd.

Belangrijkste punten

  • index, columns, values en aggfunc bepalen de betekenis van elke cel in een draaitabel.
  • De standaardaggregatie is een gemiddelde; vraag sommen expliciet op.
  • Vul ontbrekende aantallen of totalen alleen met nul aan wanneer nul de afwezigheid correct uitdrukt.
  • Randtotalen passen dezelfde functie toe op de onderliggende waarnemingen.
  • Meerdere functies of waarden kunnen hiërarchische kolommen opleveren.
  • Gebruik pivot_table voor herhaalde sleutelcombinaties en pivot voor unieke combinaties.

5.2 Tel en vergelijk categorieën met crosstab

Een kruistabel, of contingentietabel, telt waarnemingen voor combinaties van categorische variabelen. Met aandelen kun je vervolgens groepen met verschillende aantallen waarnemingen vergelijken.

Tel combinaties

De enquêtegegevens bevatten zes gebruikers met een basisabonnement: vier gebruiken een telefoon en twee een laptop. Van de vier gebruikers met een premiumabonnement gebruikt er één een telefoon en gebruiken er drie een laptop.

survey = pd.DataFrame({
    "plan": ["basic"] * 6 + ["premium"] * 4,
    "device": ["phone", "phone", "phone", "laptop", "phone", "laptop",
               "laptop", "laptop", "phone", "laptop"],
    "minutes": [20, 35, 15, 40, 25, 50, 60, 45, 30, 55]
})
counts = pd.crosstab(survey["plan"], survey["device"], margins=True)

Geef de werkelijke Series door, niet de tekenreeksen "plan" en "device". De eerste variabele levert rijen en de tweede kolommen. De rij basic bevat laptop 2 en phone 4; de rij premium bevat laptop 3 en phone 1. De rijtotalen zijn 6 en 4, de kolomtotalen zijn 5 en 5 en het eindtotaal is 10.

Bij ruwe aantallen wordt een ontbrekende combinatie als nul getoond. Je kunt dezelfde aantallen krijgen met survey.groupby(["plan", "device"]).size().unstack(fill_value=0) of een draaitabel met aggfunc="size". survey.value_counts(["plan", "device"]) geeft een lange frequentielijst gesorteerd op aantal.

Kies de noemer op basis van de vraag
InstellingNoemerBetekenis van basic–phone
normalize="all"Alle waarnemingen4/10 = 0,4
normalize="index"Rijtotaal basic4/6 ≈ 0,667
normalize="columns"Kolomtotaal phone4/5 = 0,8

“Welk aandeel van de gebruikers met een premiumabonnement gebruikt een laptop?” begint bij de gebruikers met een premiumabonnement, dus de noemer is 4. Gebruik rijnormalisatie; het antwoord is 3/4 = 0,75. “Welk aandeel van de telefoongebruikers heeft het basisabonnement?” begint bij telefoongebruikers, dus de noemer is 5. Gebruik kolomnormalisatie; het antwoord is 4/5 = 0,8.

Het aantal van drie laptopgebruikers met een premiumabonnement is groter dan het aantal van twee met een basisabonnement, maar de vergelijking binnen de abonnementen is 75% tegenover ongeveer 33,3%. Bepaal welke populatie je vergelijkt voordat je een aantal omzet in een aandeel. Vermenigvuldig genormaliseerde waarden met 100 voor percentages.

Met margins=True hebben ook genormaliseerde randtotalen een betekenis. Rijnormalisatie voegt een rij All toe met de totale apparaataandelen, 0,5 en 0,5. Kolomnormalisatie voegt een kolom All toe met de totale abonnementsaandelen, 0,6 en 0,4.

Vat een derde variabele samen

Geef values en aggfunc op om frequenties door een numerieke statistiek te vervangen:

pd.crosstab(survey["plan"], survey["device"],
            values=survey["minutes"], aggfunc="mean")

Laptopsessies met een basisabonnement van 40 en 50 minuten duren gemiddeld 45 minuten. Telefoonsessies met een basisabonnement van 20, 35, 15 en 25 minuten duren gemiddeld 23,75 minuten. Laptopsessies met een premiumabonnement van 60, 45 en 55 minuten duren gemiddeld ongeveer 53,33 minuten, terwijl de enkele telefoonsessie met een premiumabonnement 30 minuten duurt. Deze cellen beschrijven sessieduur, geen aantallen gebruikers.

Een lijst met Series kan meerdere rij- of kolomniveaus opleveren. Scores die in klassen zijn ingedeeld, werken ook als categorieën: als je fail, pass, merit en distinction kruist met de lesgroep, krijg je voor de daggroep aantallen 1, 2, 2, 2 en voor de avondgroep 1, 2, 1, 1. De betekenis van elke cel volgt nog steeds uit de rijsleutel, kolomsleutel en gekozen statistiek.

Belangrijkste punten

  • crosstab telt combinaties van opgegeven Series of arrays.
  • Kies rij-, kolom- of totaalnormalisatie op basis van de populatie in de noemer van de vraag.
  • Door values en aggfunc toe te voegen, veranderen cellen van frequenties in een numerieke samenvatting.

Groeperen en aggregeren met pandas: voorbeelden

5 Walkthroughs

1

Zet rijen om in bruikbare groepen

12 stappen
Maak en inspecteer een groepering, kies sleutels en houd rekening met elke rij in het resultaat.
  1. 1
    IntroductieBegin met een vraag per groep

    Een verzameling bestellingen kan antwoord geven op “Hoeveel eenheden zijn verkocht?” of “Hoeveel eenheden heeft elke regio verkocht?” De tweede vraag heeft een groeperingssleutel nodig.

    We verdelen bestellingen per regio, selecteren een waardekolom en combineren resultaten per groep. Daarna veranderen we de sleutels en de indeling van de uitvoer, terwijl we bijhouden welke rijen de berekening omvat.

  2. 2
    VoorbeeldMaak vier bestellingen

    Gebruik een kleine tabel zodat je elke rij kunt volgen:

    orders = pd.DataFrame({
        "region": ["West", "East", "West", "East"],
        "product": ["tea", "tea", "coffee", "tea"],
        "units": [6, 3, 8, 5]
    })
    

    De twee rijen van West worden gescheiden door een rij van East. Ze horen nog steeds bij elkaar wanneer de sleutel regio is; overeenkomende sleutels zijn belangrijker dan aangrenzende posities.

  3. 3
    UitlegSplits, tel op en combineer
    orders.groupby("region")["units"].sum()
    

    East krijgt de aantallen 3 en 5, wat 8 geeft. West krijgt 6 en 8, wat 14 geeft. pandas combineert de twee totalen tot een Series met regio als index.

    Als je alleen groupby("region") aanroept, maak je het GroupBy-object. De selectie en sum() bepalen wat je uit die groepering berekent.

  4. 4
    TipInspecteer voordat je berekent

    Sla g = orders.groupby("region") op wanneer meerdere inspecties nuttig zijn. g.ngroups rapporteert 2, g.size() rapporteert twee rijen per regio en g.get_group("West") toont de waarnemingen van West.

    Als je g["units"] selecteert, krijg je een SeriesGroupBy. Als je g[["units"]] selecteert, behoud je de DataFrame-vorm, ook al is slechts één waardekolom geselecteerd.

  5. 5
    UitdagingVoorspel een gewijzigd totaal

    Een nieuwe bestelling uit West met 4 eenheden wordt aan de tabel toegevoegd. Wat zijn de regionale totalen en verwijdert groeperen de oorspronkelijke bestelrijen?

    ---reveal---

    East blijft op 8. West wordt 18 omdat de nieuwe bestelling bij de bestaande 14 eenheden komt. De oorspronkelijke rijen blijven in de invoertabel; de gegroepeerde som is een nieuw samenvattingsobject met één vermelding per regio.

  6. 6
    VoorbeeldVoeg een tweede sleutel toe
    orders.groupby(["region", "product"])["units"].sum()
    

    Met de oorspronkelijke vier bestellingen is het totaal voor East–tea 8, voor West–coffee 8 en voor West–tea 6. De Series heeft een index met twee niveaus.

    unstack() verplaatst product naar de kolommen. East heeft geen rij voor coffee, dus de cel voor coffee ontbreekt; die met nul aanvullen past bij dit rapport met aantallen.

  7. 7
    VerbandEen sleutel kan worden berekend
    orders.groupby(orders["units"] >= 5)["units"].sum()
    

    De booleaanse sleutel maakt een groep False met totaal 3 en een groep True met totaal 19. Die geeft elke rij een label in plaats van kleine bestellingen weg te filteren.

    Een Series met toegewezen waarden werkt ook als sleutel. Series-sleutels worden op rijlabel uitgelijnd, terwijl een array één label per positie levert en even lang moet zijn als het aantal rijen.

  8. 8
    UitdagingLees een sleutel uit de index

    Een voorraad-Series heeft index M1, N1, M2 en waarden 4, 9, 7. Wat geeft stock.groupby(lambda label: label[0]).sum() terug?

    ---reveal---

    M heeft totaal 11 en N totaal 9. De functie ontvangt elk indexlabel en geeft de eerste letter daarvan terug. Ze inspecteert de voorraadwaarde niet. Een dictionary die je rechtstreeks als sleutel doorgeeft, wijst eveneens indexlabels toe; wijs eerst een kolom toe wanneer de waarden daarvan de groepen bepalen.

  9. 9
    UitlegKies labels en volgorde

    orders.groupby("region", as_index=False)["units"].sum() geeft een tabel met kolommen voor regio en aantallen terug. reset_index() zet een samenvatting met index om in dezelfde platte indeling.

    De standaardsortering van sleutels zet East vóór West. Om totalen te rangschikken, sorteer je in plaats daarvan de berekende waarden: .sum().sort_values(ascending=False). Sleutelvolgorde en waardevolgorde dienen verschillende doelen.

  10. 10
    KernpuntOntbrekende en ongebruikte sleutels verschillen

    Stel dat regio categorisch is en ook North bevat, zonder bestellingen uit North. Sinds pandas 3.0 laat de standaardinstelling observed=True die ongebruikte categorie weg; observed=False toont die.

    Een rij zonder regio is een afzonderlijke kwestie. De standaardinstelling dropna=True sluit die uit van groepen. dropna=False behoudt een groep voor ontbrekende sleutels. De ene optie kan de andere niet vervangen.

  11. 11
    UitdagingLaat het rapport aansluiten

    De oorspronkelijke vier bestellingen tellen op tot 22 eenheden. Een vijfde bestelling heeft 7 eenheden en geen regio. Een categorische regiokolom bevat ook een ongebruikte North. Hoe kan een rapport een totaal van 29 geven en North tonen?

    ---reveal---

    Groepeer met dropna=False, observed=False. De groep voor ontbrekende sleutels behoudt de extra 7; North verschijnt als ongebruikte categorie met som 0. Gebruik ook as_index=False als het rapport gewone sleutelkolommen nodig heeft.

  12. 12
    SamenvattingControleer sleutels, waarden en vorm

    Kies de sleutel die uitdrukt welke rijen bij elkaar horen en kies daarna de bewerking en de te selecteren waardekolommen. Inspecteer groepen wanneer niet duidelijk is welke rijen erbij horen.

    Controleer na het berekenen van een totaal of ontbrekende sleutels ertoe hebben geleid dat rijen zijn uitgesloten. Kies voor de presentatie tussen een resultaat met index en gewone sleutelkolommen en onderscheid het sorteren van groepsnamen van het rangschikken van de berekende waarden.

2

Kies en benoem groepssamenvattingen

13 stappen
Bereken een rapport met meerdere kolommen en onderscheid aantallen rijen, vastgelegde waarden en gewogen gemiddelden.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEen samenvatting moet een vraag beantwoorden
  2. 2
    VoorbeeldVolg een partij met een ontbrekende waarde
  3. 3
    UitlegLees de standaardinstellingen van reducties
  4. 4
    UitdagingTel de beschikbare meetwaarden
  5. 5
    VoorbeeldBenoem elke uitvoer
  6. 6
    UitlegBegrijp kolommen met meerdere functies
  7. 7
    UitdagingHerstel de rapportnamen
  8. 8
    VoorbeeldVoeg een eigen spreidingsbreedte toe
  9. 9
    TipBereid een booleaanse kolom voor
  10. 10
    VoorbeeldWeeg de gemeten hoeveelheid
  11. 11
    UitdagingBepaal de prijs per eenheid
  12. 12
    UitdagingCombineer ongelijke groepsgemiddelden
  13. 13
    SamenvattingHoud de betekenis aan elke statistiek verbonden
3

Houd groepscontext bij de juiste rijen

16 stappen
Maak aandelen, volgordeafhankelijke berekeningen, groepsfilters en flexibele uitvoer zonder de uitlijning op rijen te verliezen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBepaal welke rijen het antwoord nodig heeft
  2. 2
    VoorbeeldVerspreid een totaal
  3. 3
    VoorbeeldZet totalen om in aandelen
  4. 4
    UitdagingKies de juiste opvulwaarde
  5. 5
    UitlegBepaal eerst de volgorde
  6. 6
    VoorbeeldVergelijk met de vorige waarneming
  7. 7
    TipKies de regel voor gelijke waarden
  8. 8
    UitdagingVolg door elkaar staande groepen
  9. 9
    VoorbeeldBehoud alle rijen van een groep die voldoet
  10. 10
    TipSelecteer rijen of trek steekproeven binnen groepen
  11. 11
    UitdagingPas een voorwaarde op de hele groep toe
  12. 12
    UitlegVoorspel de vorm van apply
  13. 13
    VoorbeeldGeef meerdere rijen per groep terug
  14. 14
    UitdagingHerstel een rijtoekenning
  15. 15
    UitdagingCombineer een groepstotaal met een beslissing per rij
  16. 16
    SamenvattingStem de methode af op het resultaat
4

Maak en vergelijk numerieke klassen

14 stappen
Kies vaste grenzen of kwantielgrenzen en gebruik de resulterende categorieën voor gegroepeerde analyse.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieKies wat een klasse moet betekenen
  2. 2
    VoorbeeldMaak vaste intervallen
  3. 3
    UitlegNeem de buitenste waarden op
  4. 4
    TipHoud labels in intervalvolgorde
  5. 5
    UitdagingDeel grenswaarden in
  6. 6
    UitlegBepaal een steekproefkwantiel
  7. 7
    VoorbeeldDeel in op aantal of breedte
  8. 8
    KernpuntGelijke waarden kunnen het aantal klassen veranderen
  9. 9
    UitdagingKies stabiele grenzen
  10. 10
    VoorbeeldVat een andere variabele samen
  11. 11
    TipGeef lege groepen eerlijk weer
  12. 12
    UitdagingVerander de referentiepopulatie
  13. 13
    UitdagingLees de laatste vergelijking
  14. 14
    SamenvattingLees bereiken voordat je resultaten vergelijkt
5

Lees tweedimensionale totalen en aandelen

11 stappen
Maak een draaitabel en kies noemers voor een kruistabel op basis van de gestelde vraag.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieGeef elke cel een betekenis
  2. 2
    VoorbeeldMaak een kleine draaitabel
  3. 3
    UitlegGeef de aggregatie aan
  4. 4
    KernpuntRandtotalen gebruiken onderliggende waarnemingen
  5. 5
    UitdagingRapporteer afwezigheid en totalen
  6. 6
    VoorbeeldTel categoriecombinaties
  7. 7
    UitlegBegin met de noemer
  8. 8
    UitdagingVergelijk ongelijke groepen
  9. 9
    VerbandEen kruistabel kan waarden samenvatten
  10. 10
    UitdagingKies de tabel voor een rapport
  11. 11
    SamenvattingLees functie en populatie samen

Groeperen en aggregeren met pandas: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees groepen en kies bruikbare samenvattingen10 Oefenvragen

Vraag 1 van 10

Een tabel heeft teamlabels Delta, Echo, Delta en aantallen artikelen 6, 5, 9. Wat geeft groeperen op team en het optellen van de aantallen artikelen terug?
  1. Delta 15; Echo 5
  2. Delta 6; Echo 14
  3. Delta 20; Echo 20
  4. Delta 7,5; Echo 5
Toon antwoordVerberg antwoord
Antwoord: A
Beide rijen van Delta horen bij dezelfde groep, dus hun aantallen tellen op tot 15. Echo heeft één rij met 5 artikelen. Als je voor Delta 7,5 teruggeeft, bereken je het gemiddelde in plaats van de gevraagde som; de groepering kiest de rijen, terwijl de methode de statistiek kiest.

Vraag 2 van 10

Een DataFrame heeft de kolommen site en material. Hoe groepeer je op elke combinatie van deze twee kolommen?
  1. df.groupby(("site", "material"))
  2. df.groupby("site")["material"]
  3. df.groupby(["site", "material"])
  4. df.groupby("site").get_group("material")
Toon antwoordVerberg antwoord
Antwoord: C
Een lijst met kolomnamen maakt van elke combinatie van locatie en materiaal een groep. Een tuple wordt als één kolomlabel geïnterpreteerd en zou dus zoeken naar één kolom met die tuple als naam. Als je de materiaalkolom na het groeperen op locatie selecteert, voeg je geen tweede sleutel toe.

Vraag 3 van 10

Een gegroepeerd totaal is nodig als DataFrame met site en mass_kg als gewone kolommen. Welke aanroep levert die indeling op?
  1. df.groupby("site", sort=False)["mass_kg"].sum()
  2. df.groupby("site", as_index=False)["mass_kg"].sum()
  3. df.groupby("site", dropna=False)["mass_kg"].sum()
  4. df.groupby("site", observed=False)["mass_kg"].sum()
Toon antwoordVerberg antwoord
Antwoord: B
as_index=False houdt de groeperingssleutel in een gewone kolom en geeft een plat DataFrame terug. De standaardinstelling plaatst locatielabels in de resultaatindex. sort=False verandert de volgorde van groepssleutels, maar verplaatst die sleutels niet uit de index.

Vraag 4 van 10

Eén partij heeft meetwaarden 8, ontbrekend, 12, ontbrekend. Wat zijn de size() en de count() van de meetwaarden?
  1. Grootte 2; aantal 4
  2. Grootte 4; aantal 4
  3. Grootte 2; aantal 2
  4. Grootte 4; aantal 2
Toon antwoordVerberg antwoord
Antwoord: D
Er zijn vier rijen, dus de groepsgrootte is 4. Slechts twee meetwaarden zijn vastgelegd, dus het aantal meetwaarden is 2. Een aantal van 4 zou ontbrekende vermeldingen als waargenomen waarden behandelen en de hoeveelheid gegevens voor een gemiddelde kunnen overschatten.

Vraag 5 van 10

Je hebt één rij per machine nodig met de kolommen peak en average op basis van load. Welke aggregatie met benoemde uitvoerkolommen past?
  1. .agg(peak=("load", "max"), average=("load", "mean"))
  2. .agg(load=("peak", "max"), average=("load", "mean"))
  3. .agg(peak=("load", "mean"), average=("load", "max"))
  4. .agg(peak=("max", "load"), average=("mean", "load"))
Toon antwoordVerberg antwoord
Antwoord: A
Elk sleutelwoord benoemt uitvoer en het bijbehorende paar geeft eerst de invoerkolom en daarna de functie. De maximale belasting hoort in peak en de gemiddelde belasting in average. Als je het paar omkeert, vraag je pandas om invoerkolommen met functienamen te zoeken in plaats van de belastingskolom te gebruiken.

Vraag 6 van 10

Drie records in één laboratorium hebben energiemetingen van 4, 6 en 10 kWh. Welke waarde moet de rij met 6 kWh krijgen als elke meting wordt gedeeld door de getransformeerde som van het laboratorium?
  1. 0,60
  2. 0,20
  3. 0,30
  4. 0,50
Toon antwoordVerberg antwoord
Antwoord: C
Het laboratoriumtotaal is 20 kWh en de rij draagt 6 van die 20 bij, dus het aandeel is 0,30. De getransformeerde som herhaalt 20 op elke rij van het laboratorium. Delen door de grootste meting van 10 zou 0,60 geven, wat een andere vergelijking meet.

Vraag 7 van 10

Rijen staan in gebeurtenisvolgorde: groep A heeft waarde 7, groep B heeft 3 en daarna heeft groep A 5. Wat is de gegroepeerde cumulatieve som in die rijvolgorde?
  1. 7, 10, 15
  2. 7, 3, 12
  3. 12, 3, 12
  4. 0, 0, 1
Toon antwoordVerberg antwoord
Antwoord: B
Groep A telt de eigen waarden op, eerst 7 en daarna 12. Groep B begint afzonderlijk bij 3 en de uitvoer blijft in de oorspronkelijke rijvolgorde. De reeks 7, 10, 15 zou een cumulatieve som over de hele kolom zijn, over de groepsgrens heen.

Vraag 8 van 10

Waar valt de waarde 40 in pd.cut(x, [0, 20, 40, 60]) met de standaardinclusie van grenzen?
  1. (0, 20]
  2. (40, 60]
  3. Geen klasse
  4. (20, 40]
Toon antwoordVerberg antwoord
Antwoord: D
De standaardklassen nemen hun rechtergrenspunt op en sluiten hun linkergrenspunt uit. De waarde 40 wordt daarom opgenomen in het interval dat eindigt bij 40. Als je die in het interval plaatst dat bij 40 begint, gebruik je links gesloten intervallen, waarvoor een andere instelling nodig is.

Vraag 9 van 10

Een cel heeft twee levertijden, 12 en 18 minuten. Wat bevat een cel in pivot_table als aggfunc wordt weggelaten?
  1. 15 minuten
  2. 30 minuten
  3. 2 leveringen
  4. 18 minuten
Toon antwoordVerberg antwoord
Antwoord: A
De standaardaggregatie van een draaitabel is het gemiddelde, dus de cel bevat 15 minuten. Beide waarnemingen dragen bij aan dat gemiddelde. Een totaal van 30 minuten zou aggfunc="sum" vereisen; de indeling van de draaitabel kiest op zichzelf geen totaal.

Vraag 10 van 10

Een enquête bevat 9 thuiswerkers, van wie 6 fietsen, en 3 werknemers op locatie, van wie 2 fietsen. Een kruistabel heeft werkplek in de rijen en vervoerswijze in de kolommen. Welk genormaliseerd resultaat beantwoordt “Welk deel van de fietsers werkt thuis?”
  1. normalize="index"; 6/9
  2. normalize="all"; 6/12
  3. normalize="index"; 2/3
  4. normalize="columns"; 6/8
Toon antwoordVerberg antwoord
Antwoord: D
De referentiepopulatie bestaat uit alle fietsers: zes thuiswerkers en twee werknemers op locatie, samen acht fietsers. Het aandeel thuiswerkers onder hen is 6/8, verkregen door kolomnormalisatie. De waarde 6/9 beantwoordt in plaats daarvan welk deel van de thuiswerkers fietst en draait de populatie waarop je de vergelijking baseert om.
Set 2: Gebruik rijcontext en vergelijk verdelingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een groepering g is al gemaakt. Welke expressie rapporteert hoeveel groepen die bevat?
  1. g.count()
  2. g.ngroups
  3. g.size()
  4. len(g.groups.keys()) + 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een Series heeft rijlabels 10 en 20 met waarden 5 en 8. De Series met sleutels heeft index 20 en 10 met respectievelijk de waarden “outer” en “inner”. Wat zijn de groepssommen?
  1. Outer 5; inner 8
  2. Outer 13; inner 13
  3. Outer 8; inner 5
  4. Outer 0; inner 13
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Eén groep heeft 2 vastgelegde waarden met gemiddelde 10; een andere heeft 6 vastgelegde waarden met gemiddelde 20. Wat is het gemiddelde over alle 8 waarden?
  1. 17,5
  2. 15,0
  3. 20,0
  4. 30,0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een zelfgeschreven aggregatie ontvangt meetwaarden 3, 7 en 14. Wat geeft lambda s: s.max() - s.min() terug?
  1. 7
  2. 8
  3. 24
  4. 11
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een DataFrame heeft rijlabels met gehele getallen. Waarom kan het rechtstreeks toekennen van de som-Series met regio's als index als nieuwe kolom ontbrekende waarden opleveren?
  1. De som verandert labels met gehele getallen in regionamen.
  2. De toekenning koppelt rijlabels aan de index van de samenvatting.
  3. Een som-Series slaat alleen tekst op in plaats van getallen.
  4. De groepering overschrijft de rijindex vóór de toekenning.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een groepsfilter moet een werkplaats alleen behouden als elke vastgelegde delay kleiner is dan 4. Welk predicaat geeft één beslissing per groep?
  1. lambda g: g["delay"] < 4
  2. lambda g: (g["delay"] < 4).any()
  3. lambda g: (g["delay"] < 4).all()
  4. lambda g: g["delay"].count() < 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een gegroepeerde apply-functie geeft voor elke groep een Series terug met low en high als index. Welke structuur maakt pandas?
  1. Een Series met alleen de twee waarden van de eerste groep
  2. Een DataFrame met het oorspronkelijke aantal invoerrijen
  3. Een DataFrame met groepen als kolommen en oorspronkelijke rijen
  4. Een DataFrame met één rij per groep en twee kolommen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Maandelijkse levertijden moeten in vier groepen met ongeveer gelijke aantallen waarnemingen worden verdeeld. Welke bewerking past?
  1. pd.qcut(times, 4)
  2. pd.cut(times, 4)
  3. times.quantile(0.4)
  4. times.groupby(times).size()
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Acht temperaturen zijn 10, 11, 12, 13, 30, 31, 32, 33 °C. Locatie A heeft de eerste vier; locatie B heeft de laatste vier. Waar komt 13 °C terecht bij een indeling op de totale mediaan en bij een indeling binnen locatie A?
  1. Bovenste helft totaal; onderste helft binnen A
  2. Onderste helft totaal; onderste helft binnen A
  3. Onderste helft totaal; bovenste helft binnen A
  4. Bovenste helft totaal; bovenste helft binnen A
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een frequentietabel heeft rijen X en Y en kolommen P en Q: X heeft 2 en 6; Y heeft 3 en 1. Wat toont de rij All voor P en Q bij rijnormalisatie en randtotalen?
  1. 0,5 en 0,5
  2. 5/12 en 7/12
  3. 0,4 en 0,6
  4. 0,25 en 0,75
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Controleer resultaatvormen en beslissingen over grenzen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een categorische sleutel bevat A, B en C, maar de gegevens bevatten alleen A en B. Welke instelling neemt in pandas 3 C op in een gegroepeerde samenvatting?
  1. dropna=False
  2. as_index=False
  3. sort=False
  4. observed=False
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Twee waardekolommen worden geaggregeerd met ["sum", "mean"]. Welke labels hebben de resultaatkolommen?
  1. Paren van invoerkolomnaam en functienaam
  2. Alleen de twee oorspronkelijke invoerkolomnamen
  3. Paren van groepssleutelwaarde en invoerrijlabel
  4. Alleen de twee geselecteerde aggregatiefunctienamen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een leverancier levert 2 kg voor een eenheidsprijs van 9 en 8 kg voor een eenheidsprijs van 4. Wat is de gemiddelde prijs per kilogram voor de hele levering?
  1. 6,5
  2. 4,0
  3. 5,0
  4. 5,5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De waarden van een groep zijn achtereenvolgens 12, 9 en 15. Wat geeft gegroepeerde pct_change() terug?
  1. Ontbrekend, −3, 6
  2. Ontbrekend, −0,25, ongeveer 0,667
  3. 0, −0,25, 0,5
  4. Ontbrekend, −0,333, 0,4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een tabel is niet gesorteerd. Je hebt de twee rijen met de grootste mass_kg uit elke batch nodig. Welke werkwijze past?
  1. Groepeer op partij en neem daarna tail(2).
  2. Sorteer partijnamen en neem daarna head(2).
  3. Groepeer op partij en filter groepen met grootte 2.
  4. Sorteer massa aflopend en gebruik gegroepeerde head(2).
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een functie f sorteert elke groep op kwaliteit en geeft twee rijen terug. Wat kun je bij df.groupby("batch", group_keys=False).apply(f) verwachten voordat je het resultaat terugplaatst?
  1. Oorspronkelijke labels, met rijen geselecteerd en geordend per groep
  2. Oorspronkelijke rijvolgorde, met behoud van elke invoerrij
  3. Een scalaire Series met partij als index en één waarde per groep
  4. Een nieuwe index met gehele getallen en behoud van elke invoerrij
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een rapport gebruikt pd.cut(x, [0, 10, 20], right=False). Welke van de waarden 0, 10 en 20 krijgen een klasse?
  1. Alleen 10 en 20
  2. Alleen 0 en 20
  3. Alleen 0 en 10
  4. Alle drie de waarden
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

De waarden zijn 2, 2, 2, 2, 2, 2, 6, 10. Kwartielgrenzen worden herhaald. Wat is het gevolg van qcut(..., 4, duplicates="drop") vergeleken met eerst rangnummers toekennen met method="first"?
  1. Grenzen verwijderen behoudt vier klassen en onderscheidt gelijke waarden.
  2. Grenzen verwijderen vermindert klassen; rangnummering kan gelijke waarden splitsen.
  3. Grenzen verwijderen verwijdert gelijke rijen; rangnummering behoudt ze.
  4. Grenzen verwijderen gebruikt vaste breedtes; rangnummering gebruikt kwartielen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een rapport met vaste scoreklassen moet naast gevulde klassen ook een lege klasse tonen. Welke instelling en welk resultaat drukken dit voor aantallen en gemiddelden correct uit?
  1. observed=True; aantal 0, gemiddelde 0
  2. dropna=False; aantal 1, gemiddelde ontbrekend
  3. observed=False; aantal 0, gemiddelde ontbrekend
  4. as_index=False; aantal ontbrekend, gemiddelde 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Meerdere waarnemingen hebben dezelfde rij- en kolomsleutels. Je hebt één totaal per cel nodig. Welke bewerking past?
  1. pivot met de waardekolom
  2. unstack op de ongewijzigde rijen
  3. crosstab zonder waardekolom
  4. pivot_table met aggfunc="sum"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Maak betrouwbare gegroepeerde rapporten10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een notebook slaat g = df.groupby("team")[["items"]] op. Welk object geeft g.sum() terug?
  1. Een Series met één totaal per team
  2. Een DataFrame met een kolom items
  3. Een DataFrame met elke oorspronkelijke rij
  4. Een Series met elke oorspronkelijke rij
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een DataFrame heeft indexlabels a, b, c en hoeveelheden 5, 8, 12. Een Series met sleutels heeft labels c en a met waarden “R” en “S”. Welke gegroepeerde sommen ontstaan met dropna=False?
  1. R 5; S 8; ontbrekend 12
  2. R 12; S 13; geen ontbrekende groep
  3. R 12; S 5; ontbrekend 8
  4. R 17; S 8; geen ontbrekende groep
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Eén groep bevat één vastgelegde waarde, 11. Wat geeft de standaard gegroepeerde std() terug?
  1. 0.0
  2. 11.0
  3. 1.0
  4. NaN
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Twee inspecties registreren defectindicatoren True, False voor fabriek A en True, True, False, False, False, False voor fabriek B. Welk deel van alle geïnspecteerde artikelen is defect?
  1. 3/8
  2. 1/2
  3. 5/12
  4. 1/3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke implementatie geeft per groep de fractie meetwaarden van minstens 16 terug zonder een Python-functie per groep?
  1. df.groupby("batch")["reading"].mean() >= 16
  2. df.assign(hit=df["reading"] >= 16).groupby("batch")["hit"].sum()
  3. df.assign(hit=df["reading"] >= 16).groupby("batch")["hit"].mean()
  4. df.groupby("batch")["reading"].count() / len(df)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

De rijen zijn A:4, B:9, A:12, B:3 voor groep en hoeveelheid. Een nieuwe kolom moet het aandeel van elke rij in het totaal van de eigen groep tonen. Welke waarden verschijnen in rijvolgorde?
  1. 0,25; 0,25; 0,75; 0,75
  2. 1/7, 9/28, 3/7, 3/28
  3. 0,5; 0,5; 0,5; 0,5
  4. 0,25; 0,75; 0,75; 0,25
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Ongesorteerde gebeurtenissen zijn U op stap 2 met waarde 15, V op stap 1 met 8 en U op stap 1 met 10. Welk gegroepeerd verschil hoort na sorteren op stap bij de rij van U op stap 2, en waarom?
  1. −5; gebruik de volgende waarde van U
  2. 5; trek de waarde van U op stap 1 af
  3. 7; trek de voorafgaande waarde van V af
  4. 15; begin bij elke gebeurtenis opnieuw
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Vaste klassen moeten 0 en 100 opnemen en 50 in de laagste van twee klassen plaatsen. Welke aanroep past?
  1. pd.cut(x, [0, 50, 100], right=False)
  2. pd.cut(x, [0, 50, 100], include_lowest=True)
  3. pd.cut(x, [0, 50, 100])
  4. pd.cut(x, [0, 50, 101], right=False)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

De gesorteerde waarden zijn 4, 8, 12, 24, 40. Wat is het 0,6-kwantiel met de standaardinterpolatie van pandas?
  1. 16,8
  2. 24,0
  3. 19,2
  4. 12,0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een draaitabel met gemiddelden heeft twee gevulde cellen in een rij: één heeft gemiddelde 10 uit 1 waarneming; de andere heeft gemiddelde 30 uit 3 waarnemingen. Alle waarden en sleutels zijn vastgelegd. Wat is het randtotaal van die rij bij de aggregatie met het gemiddelde?
  1. 20
  2. 40
  3. 25
  4. 30
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Onderzoek gegroepeerde analyses en vergelijkingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Hoeveelheden zijn 7 en 11 onder sleutels A en B, plus 6 met een ontbrekende sleutel. De sleutel is categorisch met een ongebruikte categorie C. Welke instellingen behouden het totaal 24 en tonen ook C?
  1. dropna=True, observed=False
  2. dropna=False, observed=True
  3. dropna=True, observed=True
  4. dropna=False, observed=False
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

In pandas 3 heeft een groep de waarden 2 en 6. Waarom kunnen .agg("std") en .agg(np.std) verschillende resultaten geven?
  1. De aanroep met tekenreeks gebruikt een steekproefdeler; NumPy gebruikt een populatiedeler.
  2. De aanroep met tekenreeks gebruikt een populatiedeler; NumPy gebruikt een steekproefdeler.
  3. De aanroep met tekenreeks rondt invoerwaarden af; NumPy behoudt invoerwaarden.
  4. De aanroep met tekenreeks berekent variantie; NumPy berekent standaardafwijking.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Eén station heeft meetwaarden 2 en 14 en een ander heeft 9, 9 en 9. Je hebt alle oorspronkelijke rijen nodig van stations waarvan het gemiddelde hoger is dan 8. Wat moet overblijven?
  1. Alleen de rij met 14 van het eerste station
  2. Alle vijf rijen van beide stations
  3. Alle drie rijen van het tweede station
  4. Eén samenvattingsrij voor het tweede station
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Waar kan een functie die aan gegroepeerde apply op een DataFrame wordt doorgegeven sinds pandas 3.0 de huidige groepssleutel lezen?
  1. g.columns
  2. g.name
  3. g.index.name
  4. g.shape
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een rapport deelt studie-uren in klassen in en toont gemiddelde scores 60 en 85 met aantallen 20 en 2. Welke conclusie wordt door deze resultaten ondersteund?
  1. Extra studie veroorzaakte voor elke student een stijging van 25 punten.
  2. De bovenste klasse is betrouwbaarder omdat het gemiddelde hoger is.
  3. Alle studenten in de bovenste klasse scoorden hoger dan alle anderen.
  4. De gemiddelden verschillen; het bovenste berust op slechts twee scores.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een kruistabel heeft afdelingen in de rijen en uitkomsten in de kolommen. Afdeling J heeft 18 geslaagd en 6 gezakt; K heeft 12 geslaagd en 4 gezakt. Wat is het aandeel van J onder de gezakten en wat is het aandeel gezakten binnen J?
  1. 60% en 25%
  2. 25% en 60%
  3. 75% en 60%
  4. 60% en 75%
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een team gebruikt apply(lambda s: s - s.mean()) op een gegroepeerde numerieke Series, stelt daarna de index van het resultaat opnieuw in en kent de waarden op positie toe aan de oorspronkelijke ongesorteerde tabel. Waarom kan de nieuwe kolom verkeerd zijn?
  1. De berekening gebruikt een totaal gemiddelde in plaats van groepsgemiddelden.
  2. Het opnieuw instellen van de index verandert alle afwijkingen in groepstotalen.
  3. Het samenstellen per groep kan waarden aan de verkeerde invoerrijen koppelen.
  4. Een apply-resultaat laat altijd de eerste waarneming van elke groep weg.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een zelfgeschreven aggregatie gebruikt len(s) op de waarden 5, ontbrekend, 7. Wat geeft die terug en wat meet dat getal?
  1. 2; vastgelegde waarden
  2. 3; vastgelegde waarden
  3. 2; rijen in de groep
  4. 3; rijen in de groep
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Groep A heeft waarden 2, ontbrekend, 8; groep B heeft 20, ontbrekend, 40. Wat is het gemiddelde van de zes aangevulde waarden nadat elke groep is aangevuld met het getransformeerde groepsgemiddelde?
  1. 17,5
  2. Ongeveer 11,667
  3. 20,0
  4. 15,0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een draaitabelcel met een gemiddelde heeft geen waarnemingen. Waarom kan fill_value=0 een lezer misleiden?
  1. Het telt de lege cel als één nieuwe invoerrij.
  2. Het geeft een niet-waargenomen gemiddelde weer als gemeten nul.
  3. Het verwijdert de hele categorie uit de tabel.
  4. Het verandert alle gevulde gemiddelden in totalen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

68 Kernbegrippen, elk met een definitie

A

aandeel binnen de kolom
Een aandeel binnen de kolom deelt een celaantal door het kolomtotaal en beschrijft de rijcategorie van de cel binnen de populatie van die kolom.
Een aandeel binnen de kolom in een tabel met abonnementen per apparaat geeft het aandeel basisabonnementen onder alle telefoongebruikers.
aandeel binnen de rij
Een aandeel binnen de rij deelt een celaantal door het rijtotaal en beschrijft de kolomcategorie van de cel binnen de populatie van die rij.
Een aandeel binnen de rij in een tabel met abonnementen per apparaat geeft het telefoonaandeel onder gebruikers met een basisabonnement.
aandeel in het totaal
Een aandeel in het totaal deelt een celaantal door het eindtotaal en beschrijft het aandeel van die combinatie in alle waarnemingen.
Een aandeel in het totaal van 0,2 betekent dat de categoriecombinatie van de cel 20% van de volledige tabel vormt.
aanroepbaar object
Een aanroepbaar object is een functie of vergelijkbaar object dat pandas op gegroepeerde waarden kan aanroepen volgens de eigen rekenregels van dat object.
Een aanroepbaar object zoals np.std kan een andere standaarddeler gebruiken dan de pandas-functie met tekenreeks "std".
aantal aanwezige waarden
Het aantal aanwezige waarden meet hoeveel vastgelegde waarden een geselecteerde kolom binnen een groep heeft, zonder de ontbrekende vermeldingen.
Het aantal aanwezige waarden is drie wanneer een partij met vijf rijen slechts drie vastgelegde temperaturen bevat.
aantal rijen
Het aantal rijen meet het aantal waarnemingen in een groep, inclusief waarnemingen met ontbrekende waarden in gemeten kolommen.
Het aantal rijen blijft vijf, ook wanneer twee van de vijf temperatuurmetingen van een partij ontbreken.
aantal unieke waarden
Het aantal unieke waarden meet hoeveel verschillende waarden in een groep voorkomen; nunique() van pandas sluit ontbrekende waarden standaard uit.
Het aantal unieke producten per regio toont hoeveel productsoorten elke regio heeft verkocht.
afwijking van het groepsgemiddelde
Een afwijking van het groepsgemiddelde is een waarde min het gemiddelde van de eigen groep en toont hoeveel die boven of onder dat gemiddelde ligt.
Een positieve afwijking van het groepsgemiddelde duidt een bestelling aan met een omzet boven het gemiddelde van de regio.
aggregatie
Een aggregatie brengt een groep waarnemingen terug tot een samenvattende waarde per geselecteerde kolom, zoals een som, aantal of gemiddelde.
Een aggregatie van bestelhoeveelheden per magazijn geeft één totale hoeveelheid voor elk magazijn.
aggregatie met benoemde uitvoerkolommen
Aggregatie met benoemde uitvoerkolommen geeft uitvoernamen samen met invoerkolommen en samenvattingsfuncties op en levert duidelijk gelabelde resultaten.
Aggregatie met benoemde uitvoerkolommen maakt in één rapport total_mass uit een som en max_temperature uit een maximum.
aggregatiedictionary
Een aggregatiedictionary wijst invoerkolommen van een DataFrame toe aan functies, zodat verschillende maten verschillend kunnen worden samengevat.
Een aggregatiedictionary kan een som voor aantallen en zowel een gemiddelde als een maximum voor tijdsduur opvragen.
aggregatiefunctie
Een aggregatiefunctie bepaalt hoe een cel in een draaitabel de waarnemingen combineert, bijvoorbeeld met een gemiddelde, som of aantal.
Wanneer je de aggregatiefunctie op som instelt, verandert een cel met herhaalde sleutels van gemiddelde omzet in totale omzet.
analyse per klasse
Een analyse per klasse vat één variabele samen binnen numerieke klassen van een andere variabele en rapporteert vaak aantallen en gemiddelden per klasse.
Een analyse per klasse vergelijkt gemiddelde examenscores van studenten in verschillende vaste bereiken van studie-uren.

B

broadcasting
Broadcasting herhaalt een scalair groepsresultaat over de rijen van de groep en maakt het beschikbaar voor berekeningen per rij.
Door een groepstotaal via transform met broadcasting te verspreiden, krijgt elke rij de noemer voor het eigen aandeel.

C

cumulatieve som
Een gegroepeerde cumulatieve som is een doorlopend totaal dat de huidige rijvolgorde volgt en voor elke groep opnieuw begint.
De cumulatieve som van verkochte eenheden begint opnieuw wanneer je de reeks bestellingen van een andere regio volgt.

D

draaitabel
Een draaitabel aggregeert waardekolommen voor combinaties van rij- en kolomsleutels en geeft de resultaten weer in een tweedimensionaal raster.
Een draaitabel kan in één rapport het totale aantal verkochte eenheden voor elke combinatie van regio en product weergeven.
dubbele sleutelcombinatie
Een dubbele sleutelcombinatie ontstaat wanneer meerdere rijen dezelfde rij- en kolomsleutels delen die één cel in een draaitabel zouden aanduiden.
Een dubbele sleutelcombinatie moet via pivot_table worden geaggregeerd voordat die één numerieke cel kan vullen.

F

filtering
Een filtering behoudt geselecteerde oorspronkelijke rijen of groepen en bewaart hun rijlabels in plaats van ze door samenvattingen te vervangen.
Een filtering kan elke bestelling behouden uit regio's die minstens drie bestellingen in de dataset hebben.
functietoepassing per groep
Gegroepeerde functietoepassing per groep voert een functie op elke groep uit en combineert scalaire uitvoer, Series of DataFrames tot één resultaat.
Functietoepassing per groep kan een correlatie berekenen uit twee gemeten kolommen binnen de waarnemingen van elke lesgroep.

G

gelijke waarde
Er is sprake van een gelijke waarde wanneer waarnemingen dezelfde waarde hebben; als je gelijke waarden bij elkaar houdt, kunnen de aantallen in kwantielklassen ongelijk worden.
Een gelijke waarde op een steekproefkwartiel kan meerdere gelijke waarnemingen in één interval plaatsen en ongelijke aantallen opleveren.
gemiddelde van booleaanse waarden
Het gemiddelde van booleaanse waarden is het gemiddelde van True- en False-waarden, geïnterpreteerd als 1 en 0, en geeft het aandeel True-waarden.
Het gemiddelde van booleaanse defectindicatoren geeft de fractie defecte artikelen per partij in plaats van het aantal defecten.
geordende categorische variabele
Een geordende categorische variabele is een verzameling categoriewaarden met een expliciete volgorde, zoals de volgorde van laag naar hoog van numerieke klassen.
Een geordende categorische variabele houdt de scorelabels fail, pass, merit, distinction in hun betekenisvolle volgorde.
gewogen gemiddelde
Een gewogen gemiddelde geeft waarnemingen verschillende invloed volgens opgegeven gewichten, zoals het aantal eenheden in elke bestelling.
Een gewogen gemiddelde van bestelprijzen met aantallen eenheden als gewichten is gelijk aan de totale omzet gedeeld door het totale aantal eenheden.
groeperingssleutel
Een groeperingssleutel wijst elke rij toe aan een groep; meerdere sleutels delen rijen in op basis van hun gedeelde combinatie van waarden.
Een groeperingssleutel op basis van materiaalsoort plaatst alle aluminiumrecords in dezelfde analysegroep.
groepsfilter
Een groepsfilter behoudt of verwijdert een hele groep met één booleaanse beslissing en geeft oorspronkelijke rijen terug van groepen die voldoen.
Een groepsfilter behoudt alle records van stations waarvan de gemiddelde meting boven een rapportagedrempel ligt.
groepsfunctie
Een groepsfunctie ontvangt de gegevens van een groep en berekent het resultaat; gegroepeerde apply kan meerdere kolommen samen aan de functie doorgeven.
Een groepsfunctie kan alle kolommen van elke partij sorteren en de twee records met de hoogste kwaliteit teruggeven.
groepssleutels
Groepssleutels duiden teruggegeven delen in een gegroepeerd resultaat aan en kunnen door apply als buitenste indexniveau worden toegevoegd.
Groepssleutels boven oorspronkelijke rijlabels maken duidelijk uit welke regio elke geselecteerde bestelling komt.
GroupBy-object
Een GroupBy-object bevat groeperingsinformatie en biedt bewerkingen die resultaten berekenen uit de rijen in elke groep.
Een GroupBy-object dat voor teams is gemaakt, kan later zowel artikeltotalen als gemiddelde levertijden opleveren.

H

hiërarchische kolommen
Hiërarchische kolommen hebben meerdere labelniveaus en koppelen vaak elke gemeten variabele aan de aggregatiefunctie.
Hiërarchische kolommen onderscheiden een gemiddelde van aantallen van een gemiddelde van omzet wanneer beide statistieken samen voorkomen.

I

indexniveau naar kolommen verplaatsen
Indexniveau naar kolommen verplaatsen is een bewerking die een indexniveau naar kolommen verplaatst en combinaties met een index omzet in een bredere tabel.
Indexniveau naar kolommen verplaatsen zet productlabels in een gegroepeerde index om in kolommen naast de totalen van elke regio.

K

klasse-indeling
Klasse-indeling zet numerieke waarnemingen om in intervalcategorieën, zodat waardebereiken als groeperingslabels kunnen dienen.
Klasse-indeling van levertijden in vaste tijdbereiken maakt een maandelijks frequentierapport gemakkelijker vergelijkbaar.
klassen met gelijke breedte
Klassen met gelijke breedte verdelen een numeriek bereik in intervallen met dezelfde breedte, zonder gelijke aantallen waarnemingen te vereisen.
Klassen met gelijke breedte kunnen de meeste leveringen in het eerste interval plaatsen wanneer enkele vertragingen extreem lang zijn.
klassengrens
Een klassengrens is een grens tussen of rond intervallen; aangrenzende grenzen bepalen de mogelijke bereiken voor klassetoewijzingen.
Een klassengrens op 50 scheidt twee scorebereiken, waarbij de inclusieregel bepaalt tot welke klasse 50 behoort.
kruistabel
Een kruistabel, ook contingentietabel genoemd, is een tabel met frequenties voor combinaties van categorische variabelen.
Een kruistabel van abonnement per apparaat telt hoeveel gebruikers bij elke combinatie van abonnement en apparaat horen.
kwantiel
Een kwantiel duidt een opgegeven fractionele positie in gesorteerde gegevens aan; pandas kan interpoleren wanneer die positie tussen waarden valt.
Het 0,5-kwantiel is de mediaan van een groep, terwijl het 0,9-kwantiel een hogere relatieve positie aanduidt.
kwantielanalyse
Een kwantielanalyse vergelijkt een maat tussen groepen die door kwantielklassen zijn bepaald, zoals lagere en hogere delen van een steekproef.
Een kwantielanalyse kan de sessieduur samenvatten voor klanten in elk kwart van de aankoopbedragen.
kwantielklasse
Een kwantielklasse is een interval dat wordt begrensd door steekproefkwantielen en bedoeld is om een gekozen aandeel van de waarnemingen in de steekproef te bevatten.
Een kwantielklasse voor het hoogste kwart van de klanten kan in een latere steekproef andere numerieke grenzen krijgen.
kwartiel
Een kwartiel is een van de grenswaarden op kwartposities in een verdeling, doorgaans bij kansen 0,25, 0,5 en 0,75.
Steekproefkwartielen als grenzen laten qcut waarnemingen verdelen in vier groepen met ongeveer gelijke aantallen.

L

lambda-expressie
Een lambda-expressie definieert een korte naamloze Python-functie, vaak gebruikt voor een compacte eigen groepsberekening.
Een lambda-expressie kan de fractie meetwaarden teruggeven die aan een opgegeven temperatuurdrempel voldoet.
lineaire interpolatie
Lineaire interpolatie schat een waarde tussen aangrenzende waarnemingen door het bijbehorende deel van hun verschil te nemen.
Lineaire interpolatie kan een steekproefpercentiel tussen twee scores plaatsen, ook als geen van beide scores daaraan gelijk is.

M

mediaan
De mediaan is het midden van gesorteerde vastgelegde waarden; bij een even aantal vastgelegde waarden is het de gemiddelde waarde van de twee middelste.
De mediaan van gegroepeerde bestelbedragen kan minder door één grote bestelling worden beïnvloed dan het gemiddelde.
MultiIndex
Een MultiIndex is een index met meerdere niveaus, waardoor één rij- of kolomlabel een combinatie van sleutelwaarden kan vertegenwoordigen.
Een MultiIndex met regio en product geeft een totaal aan op basis van zowel de plaats van een bestelling als de inhoud ervan.

N

normalisatie
Normalisatie zet frequentieaantallen om in aandelen door ze te delen door een gekozen rijtotaal, kolomtotaal of eindtotaal.
Normalisatie op kolommen vergelijkt de verdeling over abonnementen afzonderlijk onder telefoongebruikers en laptopgebruikers.

O

ongebruikte categorie
Een ongebruikte categorie is een vastgelegde categorische waarde zonder waarnemingen in de huidige dataset die toch in een samenvatting kan verschijnen.
Een ongebruikte categorie voor een magazijn behoudt een plaats in een rapport wanneer observed=False is gekozen.
ontbrekende sleutel
Een ontbrekende sleutel is een afwezige groeperingswaarde waardoor een rij standaard wordt uitgesloten of bij dropna=False een afzonderlijke groep vormt.
Een ontbrekende sleutel in de regiokolom kan verklaren waarom regionale sommen een verder vastgelegde bestelling weglaten.
opvulwaarde
Een opvulwaarde vervangt ontbrekende resultaatcellen door een gekozen weergavewaarde, die de betekenis van de afwezigheid correct moet uitdrukken.
Een opvulwaarde van nul kan in een tabel met aantallen aangeven dat er geen bestellingen zijn, maar een niet-waargenomen gemiddelde verkeerd weergeven.

P

platte samenvattingstabel
Een platte samenvattingstabel houdt groeperingssleutels als gewone kolommen, met één rij voor elke samengevatte sleutelcombinatie.
Een platte samenvattingstabel met kolommen voor locatie en totale massa is handig voor een latere samenvoeging op locatie.
predicaat
Een predicaat is een functie die een booleaanse beslissing teruggeeft; een GroupBy-filterpredicaat moet één beslissing per groep geven.
Een predicaat met all() kan vereisen dat elke meetwaarde in een groep aan dezelfde kwaliteitsvoorwaarde voldoet.

R

randtotaal
Een randtotaal is een samenvattende rij of kolom die uit onderliggende waarnemingen wordt berekend met de aggregatiefunctie van de draaitabel.
Een randtotaal met een gemiddelde weegt gevulde cellen naar hun aantal waarnemingen, omdat het de onderliggende rijen middelt.
rangnummer binnen de groep
Een rangnummer binnen de groep beschrijft de positie van een waarde ten opzichte van andere waarden in de eigen groep, met een gekozen regel voor gelijke waarden.
Een aflopend rangnummer binnen de groep geeft de grootste bestelling van elke regio rangnummer 1 zonder rijen te verplaatsen.
rangnummering zonder hiaten
Rangnummering zonder hiaten kent gelijke waarden hetzelfde rangnummer toe en geeft de volgende afwijkende waarde het volgende gehele getal, zonder hiaat.
Bij aflopende rangnummering zonder hiaten krijgen twee gelijke hoogste meetwaarden rangnummer 1 en krijgt de volgende lagere meetwaarde rangnummer 2.
rechts gesloten interval
Een rechts gesloten interval neemt het bovenste grenspunt op; de standaardintervallen van cut sluiten het linkergrenspunt uit en nemen het rechter op.
Het rechts gesloten interval (20, 40] bevat de waarde 40 maar sluit de waarde 20 uit.
referentiepopulatie
Een referentiepopulatie is de verzameling waarnemingen die voor een vergelijking wordt gebruikt, zoals alle rijen of de rijen van één subgroep.
Een referentiepopulatie van één lesgroep kan een score een ander relatief label geven dan de volledige studentendataset.
relatieve verandering
Een relatieve verandering is een verschil ten opzichte van de vorige waarde, gedeeld door die vorige waarde en uitgedrukt als fractie.
Een relatieve verandering van 0,15 betekent een stijging van 15% ten opzichte van de voorafgaande waarneming in dezelfde groep.

S

samenhang
Samenhang is een waargenomen verband tussen variabelen, zoals veranderende groepsgemiddelden over klassen, zonder dat daarmee een oorzaak wordt vastgesteld.
Een samenhang tussen klassen van studie-uren en gemiddelde scores kan ook andere verschillen tussen studenten weerspiegelen.
scalair resultaat
Een scalair resultaat is één waarde die voor een groep wordt teruggegeven en die gegroepeerde apply combineert tot een Series met groepssleutels als index.
Een scalair resultaat van de prijsberekening van elke regio geeft één regionale prijs per eenheid.
selectie van de n grootste waarden
Een selectie van de n grootste waarden behoudt per groep een gekozen aantal rijen met de hoogste waarden na ordening op de gemeten variabele.
Een selectie van de twee grootste bestellingen per regio kan een aflopende sortering op omzet gebruiken, gevolgd door gegroepeerde head(2).
splitsen, toepassen en combineren
Splitsen, toepassen en combineren is een patroon dat overeenkomende rijen groepeert, elke groep afzonderlijk verwerkt en de resultaten samenstelt.
Splitsen, toepassen en combineren zet een tabel met afzonderlijke bestellingen om in één totale hoeveelheid per regio.
steekproefstandaardafwijking
De steekproefstandaardafwijking meet spreiding rond een gemiddelde met een deler die één kleiner is dan het aantal vastgelegde waarnemingen.
Een groep met één vastgelegde meetwaarde heeft volgens de standaardinstelling van pandas een ontbrekende steekproefstandaardafwijking.
steekproeftrekking per groep
Steekproeftrekking per groep trekt waarnemingen afzonderlijk binnen elke groep, met een opgegeven aantal rijen of fractie voor elke groep.
Een steekproeftrekking per groep met n=1 bevat één record uit elke niet-lege regio, in plaats van het risico te lopen regio's weg te laten.

T

transformatie
Een gegroepeerde transformatie levert resultaten met de lengte en index van de invoer, zodat groepsinformatie met elke rij kan worden meegegeven.
Een transformatie herhaalt het totaal van een regio op de bestelrijen, zodat elke bestelling een regionaal aandeel kan krijgen.

U

uitlijning op de index
Uitlijning op de index koppelt pandas-objecten op basis van hun indexlabels bij het combineren of toekennen van waarden, waaronder Series met groeperingssleutels.
Uitlijning op de index koppelt een sleutel met label rij 8 aan gegevensrij 8, ook als de Series met sleutels in een andere volgorde wordt weergegeven.

V

vertraagde waarde
Een vertraagde waarde is een eerdere waarneming die binnen de gekozen reeks naar een latere rij is verschoven, afzonderlijk voor elke groep.
Met een vertraagde waarde kan elke bestelling het aantal eenheden vergelijken met de vorige bestelling uit dezelfde regio.
vrijheidsgraden
Vrijheidsgraden zijn de onafhankelijke stukjes informatie die beschikbaar zijn om spreiding te schatten; de steekproefvariantie gebruikt er één minder dan het aantal vastgelegde waarden.
Bij drie vastgelegde meetwaarden zijn er twee vrijheidsgraden voor de standaardsteekproefvariantie.

W

waardetoewijzing
Een waardetoewijzing koppelt invoerlabels of -waarden aan uitvoersleutels, zodat meerdere oorspronkelijke categorieën een bredere groep kunnen delen.
Een waardetoewijzing van regio's aan zones kan meerdere regionale hoeveelheden combineren tot één zonetotaal.
waargenomen categorieën
Waargenomen categorieën zijn categorische waarden die daadwerkelijk in de gegevens voorkomen, in tegenstelling tot vastgelegde categorieën zonder rijen.
Wanneer een categorische sleutel in pandas 3 wordt gegroepeerd, verschijnen standaard alleen waargenomen categorieën.

Z

z-score binnen de groep
Een z-score binnen de groep drukt de afwijking van een waarde ten opzichte van het groepsgemiddelde uit in eenheden van de standaardafwijking van die groep.
Een z-score binnen de groep kan een relatief hoge meetwaarde in één laboratorium tonen, ook wanneer de absolute waarde bescheiden is.
zelfgeschreven aggregatie
Een zelfgeschreven aggregatie is een door de gebruiker geschreven functie die de Series van één groep ontvangt en een bruikbare samenvattende waarde teruggeeft.
Een zelfgeschreven aggregatie kan de grootste waarde van een groep min de kleinste waarde als spreidingsbreedte rapporteren.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag