كيفية استخدام وظائف groupby() وtransform() في pandas


يمكنك استخدام الطرق التالية لاستخدام الدالتين groupby() و transform() معًا في pandas DataFrame:

الطريقة الأولى: استخدم groupby() وtransform() مع الوظيفة المضمنة

 df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')

الطريقة الثانية: استخدام groupby() وtransform() مع وظيفة مخصصة

 df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)

توضح الأمثلة التالية كيفية استخدام كل طريقة عمليًا مع الباندا 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

مثال 1: استخدم groupby() وtransform() مع وظيفة مدمجة

يوضح التعليمة البرمجية التالية كيفية استخدام الدالتين groupby( ) و transform() لإضافة عمود جديد إلى DataFrame يسمى mean_points:

 #create new column called mean_points
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 ، لذلك تم تخصيص هذه القيم وفقًا لذلك لكل لاعب في عمود جديد.

لاحظ أنه يمكننا أيضًا استخدام دالة مدمجة أخرى مثل sum() لإنشاء عمود جديد يعرض مجموع النقاط المسجلة لكل فريق:

 #create new column called sum_points
df[' sum_points '] = df. groupby (' team ')[' points ']. transform (' sum ')

#view updated DataFrame
print (df)

  team points sum_points
0 to 30 85
1 to 22 85
2 A 19 85
3 to 14 85
4 B 14 73
5 B 11 73
6 B 20 73
7 B 28 73

مجموع نقاط لاعبي الفريق أ كان 85 ومجموع نقاط لاعبي الفريق ب 73 ، لذلك تم تخصيص هذه القيم وفقًا لذلك لكل لاعب في عمود جديد.

المثال 2: استخدم groupby() وtransform() مع وظيفة مخصصة

يوضح التعليمة البرمجية التالية كيفية استخدام الدالتين groupby( ) و transform() لإنشاء وظيفة مخصصة تحسب النسبة المئوية لإجمالي النقاط التي سجلها كل لاعب في فرقه الخاصة:

 #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

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *