كيفية حساب الإزاحة لكل مجموعة في الباندا
يمكنك استخدام الطرق التالية لحساب القيم المتغيرة للمجموعة في Pandas DataFrame:
الطريقة الأولى: حساب الإزاحة بواسطة مجموعة
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
الطريقة الثانية: حساب الإزاحة بواسطة مجموعات متعددة
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
لاحظ أن قيمة الدالة Shift() تشير إلى عدد القيم التي سيتم حساب الإزاحة لها.
توضح الأمثلة التالية كيفية استخدام كل طريقة عمليًا.
مثال 1: حساب الإزاحة بواسطة مجموعة
لنفترض أن لدينا DataFrame الباندا التالي الذي يوضح المبيعات التي أجراها متجران في أيام متتالية:
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
يمكننا استخدام الصيغة التالية لإنشاء عمود إزاحة يعرض مبيعات اليوم السابق لكل متجر:
#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
وإليك كيفية تفسير النتيجة:
- القيمة الأولى في عمود الإزاحة هي NaN نظرًا لعدم وجود قيمة سابقة في عمود المبيعات للمتجر أ.
- القيمة الثانية في عمود الإزاحة هي 18 لأنها القيمة السابقة في عمود المبيعات للمتجر أ.
وما إلى ذلك وهلم جرا.
مثال 2: حساب الإزاحة بواسطة مجموعات متعددة
لنفترض أن لدينا DataFrame الباندا التالية التي تعرض المبيعات التي أجراها موظفو متجرين في أيام متتالية:
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
يمكننا استخدام الصيغة التالية لإنشاء عمود إزاحة يعرض مبيعات اليوم السابق لكل موظف في كل متجر:
#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
يعرض عمود lalag_sales الجديد مبيعات اليوم السابق لكل موظف في كل متجر.
ملاحظة : في هذا المثال، قمنا بالتجميع حسب عمودين، ولكن يمكنك التجميع حسب أي عدد تريده من الأعمدة عن طريق تضمين أي عدد تريده من أسماء المتغيرات في الدالة groupby() .
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في الباندا:
كيفية حذف الأعمدة في الباندا
كيفية استبعاد الأعمدة في الباندا
كيفية تطبيق دالة على الأعمدة المحددة في Pandas
كيفية تغيير ترتيب الأعمدة في Pandas DataFrame