Jak obliczyć przesunięcie na grupę w pandach
Aby obliczyć wartości przesunięte w grupie w ramce DataFrame pandy, możesz użyć następujących metod:
Metoda 1: Oblicz przesunięcie według grupy
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
Metoda 2: Oblicz przesunięcie dla wielu grup
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
Należy pamiętać, że wartość funkcji shift() wskazuje liczbę wartości, dla których należy obliczyć przesunięcie.
Poniższe przykłady pokazują, jak zastosować każdą metodę w praktyce.
Przykład 1: Oblicz przesunięcie według grupy
Załóżmy, że mamy następującą ramkę danych pand, która pokazuje sprzedaż dokonaną przez dwa sklepy w kolejnych dniach:
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
Możemy użyć następującej składni, aby utworzyć kolumnę przesunięcia, która wyświetla sprzedaż z poprzedniego dnia dla każdego sklepu:
#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
Oto jak zinterpretować wynik:
- Pierwszą wartością w kolumnie przesunięcia jest NaN , ponieważ w kolumnie sprzedaży sklepu A nie ma wcześniejszej wartości.
- Druga wartość w kolumnie offset to 18 , ponieważ jest to poprzednia wartość w kolumnie sprzedaży dla sklepu A.
I tak dalej.
Przykład 2: Oblicz przesunięcie dla wielu grup
Załóżmy, że mamy następującą pandę DataFrame, która pokazuje sprzedaż dokonaną przez pracowników dwóch sklepów w kolejnych dniach:
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
Możemy użyć następującej składni, aby utworzyć kolumnę przesunięcia, która wyświetla sprzedaż poprzedniego dnia dla każdego pracownika w każdym sklepie:
#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
Nowa kolumna lagged_sales wyświetla sprzedaż z poprzedniego dnia dla każdego pracownika w każdym sklepie.
Uwaga : w tym przykładzie pogrupowaliśmy według dwóch kolumn, ale możesz grupować według dowolnej liczby kolumn, włączając dowolną liczbę nazw zmiennych w funkcji groupby() .
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w pandach:
Jak usunąć kolumny w Pandach
Jak wykluczyć kolumny w Pandach
Jak zastosować funkcję do wybranych kolumn w Pandach
Jak zmienić kolejność kolumn w Pandas DataFrame