Hoe de offset per groep in panda's te berekenen
U kunt de volgende methoden gebruiken om groep-verschoven waarden in een Panda DataFrame te berekenen:
Methode 1: Bereken de offset van een groep
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
Methode 2: Bereken de offset van meerdere groepen
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
Merk op dat de waarde van de functie shift() het aantal waarden aangeeft waarvoor de verschuiving moet worden berekend.
De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken.
Voorbeeld 1: Bereken de offset van een groep
Laten we zeggen dat we het volgende panda’s DataFrame hebben dat de verkopen weergeeft die door twee winkels op opeenvolgende dagen zijn gerealiseerd:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]}) #view DataFrame print (df) blind sales 0 to 18 1 to 10 2 to 14 3 to 13 4 B 19 5 B 24 6 B 25 7 B 29
We kunnen de volgende syntaxis gebruiken om een compensatiekolom te maken die de verkopen van de vorige dag voor elke winkel weergeeft:
#add column that displays lag of sales column by store df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 ) #view updated DataFrame print (df) store sales lagged_sales 0 to 18 NaN 1 to 10 18.0 2 A 14 10.0 3 A 13 14.0 4 B 19 NaN 5 B 24 19.0 6 B 25 24.0 7 B 29 25.0
Zo interpreteert u het resultaat:
- De eerste waarde in de compensatiekolom is NaN , aangezien er geen eerdere waarde bestaat in de verkoopkolom voor winkel A.
- De tweede waarde in de compensatiekolom is 18 , aangezien dit de vorige waarde is in de verkoopkolom voor winkel A.
Enzovoort.
Voorbeeld 2: Bereken de offset van meerdere groepen
Stel dat we het volgende panda’s DataFrame hebben dat de verkopen weergeeft die werknemers van twee winkels op opeenvolgende dagen hebben gemaakt:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'], ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]}) #view DataFrame print (df) store employee sales 0 AO 18 1 AO 10 2 AR 14 3 AR 13 4 BO 19 5 BO 24 6 BR 25 7 BR 29
We kunnen de volgende syntaxis gebruiken om een compensatiekolom te maken die de verkopen van de vorige dag voor elke werknemer in elke winkel weergeeft:
#add column that displays lag of sales column by store and employee df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 ) #view updated DataFrame print (df) store employee sales lagged_sales 0 AO 18 NaN 1 AO 10 18.0 2 AR 14 NaN 3 AR 13 14.0 4 BO 19 NaN 5 BO 24 19.0 6 BR 25 NaN 7 BR 29 25.0
De nieuwe kolom met vertraagde verkoop toont de omzet van de vorige dag voor elke medewerker in elke winkel.
Opmerking : in dit voorbeeld hebben we gegroepeerd op twee kolommen, maar u kunt op zoveel kolommen groeperen als u wilt door zoveel namen van variabelen op te nemen als u wilt in de functie groupby() .
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in panda’s kunt uitvoeren:
Hoe kolommen in Panda’s te verwijderen
Hoe u kolommen uitsluit in Panda’s
Hoe een functie toe te passen op geselecteerde kolommen in Pandas
Hoe u de kolomvolgorde in Pandas DataFrame kunt wijzigen