الباندا: كيفية استخدام وظيفة mutate() المكافئة لـ r
في لغة البرمجة R، يمكننا استخدام الدالة mutate() من الحزمة dplyr لإضافة أعمدة جديدة بسرعة إلى إطار من البيانات المحسوبة من الأعمدة الموجودة.
على سبيل المثال، يوضح التعليمة البرمجية التالية كيفية حساب متوسط قيمة عمود معين في R وإضافة تلك القيمة كعمود جديد في إطار بيانات:
library (dplyr) #create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(30, 22, 19, 14, 14, 11, 20, 28)) #add new column that shows mean points by team df <- df %>% group_by(team) %>% mutate(mean_points = mean(points)) #view updated data frame df team points mean_points 1 to 30 21.2 2 A 22 21.2 3 A 19 21.2 4 A 14 21.2 5 B 14 18.2 6 B 11 18.2 7 B 20 18.2 8 B 28 18.2
ما يعادل وظيفة mutate() في الباندا هو وظيفة تحويل() .
يوضح المثال التالي كيفية استخدام هذه الوظيفة عمليًا.
مثال: استخدام التحويل () في الباندا لتكرار التحول () في R
لنفترض أن لدينا DataFrame الباندا التالي الذي يعرض النقاط التي سجلها لاعبو كرة السلة من فرق مختلفة:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' points ': [30, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print (df) team points 0 to 30 1 to 22 2 to 19 3 to 14 4 B 14 5 B 11 6 B 20 7 B 28
يمكننا استخدام الدالة Transform() لإضافة عمود جديد يسمى Mean_points يوضح متوسط النقاط التي سجلها كل فريق:
#add new column to DataFrame that shows mean points by team df[' mean_points '] = df. groupby (' team ')[' points ']. transform (' mean ') #view updated DataFrame print (df) team points mean_points 0 to 30 21.25 1 to 22 21.25 2 A 19 21.25 3 to 14 21.25 4 B 14 18.25 5 B 11 18.25 6 B 20 18.25 7 B 28 18.25
كان متوسط قيمة النقاط للاعبين في الفريق أ 21.25 وكان متوسط قيمة النقاط للاعبين في الفريق ب 18.25 ، لذلك تم تخصيص هذه القيم وفقًا لذلك لكل لاعب في عمود جديد.
لاحظ أن هذا يطابق النتائج التي تم الحصول عليها باستخدام الدالة mutate() في المثال التمهيدي.
تجدر الإشارة إلى أنه يمكنك أيضًا استخدام lambda لإجراء عمليات حسابية مخصصة في وظيفة التحويل () .
على سبيل المثال، يوضح التعليمة البرمجية التالية كيفية استخدام لامدا لحساب النسبة المئوية لإجمالي النقاط التي سجلها كل لاعب في فريقه:
#create new column called percent_of_points
df[' percent_of_points '] = df. groupby (' team ')[' points ']. transform ( lambda x:x/ x.sum ())
#view updated DataFrame
print (df)
team points percent_of_points
0 A 30 0.352941
1 A 22 0.258824
2 A 19 0.223529
3 A 14 0.164706
4 B 14 0.191781
5 B 11 0.150685
6 B 20 0.273973
7 B 28 0.383562
وإليك كيفية تفسير النتيجة:
- حصل اللاعب الأول من فريق أ على 30 نقطة من إجمالي 85 بين لاعبي فريق أ، وبذلك أصبحت نسبته من إجمالي النقاط المسجلة 30/85 = 0.352941 .
- حصل اللاعب الثاني من فريق (أ) على 22 نقطة من إجمالي 85 بين لاعبي الفريق (أ) وبذلك تكون نسبته من مجموع النقاط المسجلة 22/85 = 0.258824 .
وما إلى ذلك وهلم جرا.
لاحظ أنه يمكننا استخدام وسيطة lambda في وظيفة التحويل () لإجراء أي عملية حسابية مخصصة نريدها.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ العمليات الشائعة الأخرى في الباندا:
كيفية إجراء مجموع GroupBy في Pandas
كيفية استخدام Groupby وPlot في Pandas
كيفية حساب القيم الفريدة باستخدام GroupBy في Pandas