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?

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir