Pandalar'da grup başına ofset nasıl hesaplanır
Bir pandas DataFrame’de grup kaydırmalı değerleri hesaplamak için aşağıdaki yöntemleri kullanabilirsiniz:
Yöntem 1: Uzaklığı bir gruba göre hesaplama
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
Yöntem 2: Birden çok gruba göre uzaklığı hesaplama
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
Shift() işlevinin değerinin, kaydırmanın hesaplanacağı değerlerin sayısını gösterdiğini unutmayın.
Aşağıdaki örnekler her yöntemin pratikte nasıl kullanılacağını göstermektedir.
Örnek 1: Bir gruba göre ofseti hesaplama
Diyelim ki iki mağazanın birbirini takip eden günlerde yaptığı satışları gösteren aşağıdaki panda DataFrame’imiz var:
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
Her mağaza için önceki günün satışlarını görüntüleyen bir mahsup sütunu oluşturmak için aşağıdaki sözdizimini kullanabiliriz:
#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
Sonucun nasıl yorumlanacağı aşağıda açıklanmıştır:
- A mağazası için satış sütununda herhangi bir ön değer olmadığından mahsup sütunundaki ilk değer NaN’dir .
- Ofset sütunundaki ikinci değer, A mağazasının satış sütunundaki önceki değer olduğundan 18’dir .
Ve benzeri.
Örnek 2: Çoklu gruplara göre uzaklığı hesaplama
İki mağazanın çalışanlarının birbirini takip eden günlerde yaptığı satışları gösteren aşağıdaki panda DataFrame’e sahip olduğumuzu varsayalım:
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
Her mağazadaki her çalışan için önceki günün satışlarını görüntüleyen bir mahsup sütunu oluşturmak için aşağıdaki sözdizimini kullanabiliriz:
#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
Yeni lagged_sales sütunu, her mağazadaki her çalışan için önceki günün satışlarını görüntüler.
Not : Bu örnekte iki sütuna göre gruplandırma yaptık ancak groupby() işlevine istediğiniz kadar değişken adı ekleyerek istediğiniz kadar sütuna göre gruplandırabilirsiniz.
Ek kaynaklar
Aşağıdaki eğitimlerde pandalarda diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:
Pandalar’daki sütunlar nasıl silinir
Pandalar’da sütunlar nasıl hariç tutulur?
Pandalar’da seçilen sütunlara bir işlev nasıl uygulanır?
Pandas DataFrame’de sütun sırası nasıl değiştirilir?