اذهب إلى المحتوى
  • 0

تصنيف نقاط البيانات بناءً على قيم عمود محدد باستخدام Pandas في بايثون

Maram Jouriah

السؤال

لنفرض لدي الاطار التالي

df = pd.DataFrame({'a' : [1, 2, 3, 4, 5], 'b' : ['yes', 'no', 'yes', 'no', 'absent']})

يعطي الخرج

 a       b
0  1     yes
1  2      no
2  3     yes
3  4      no
4  5  absent

ارغب بالحصول على الخرج 

  a       b  c
0  1     yes  2
1  2      no  1
2  3     yes  2
3  4      no  1
4  5  absent  0

 

تم التعديل في بواسطة Ali Haidar Ahmad
تعديل عنوان السؤال ليلائم المطلوب
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكننا تعريف حقل جديد C بالخصائص التالية:

df['c'] = pd.Categorical.from_array(df.b).labels

حيث سيأخذ قيمة أسماء عناصر b ويعمل منهم تصنيف:

absent -> 0
no     -> 1
yes    -> 2

نلاحظ أنهم بترتيب أبجدي.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

- عنوان السؤال يشير لسؤال آخر تمامًا، وغير متطابق مع الشرح. ففي حالة أردنا تغيير نوع البيانات في عمود فهذا يعني تحويل صنف (نوع) البيانات في هذا العمود من صنف لآخر؛ كتحويل صنف العمود الأول من بياناتك من int إلى str، ويمكن إجراء ذلك من خلال استخدام الدلة astype:

DataFrame.astype(dtype, copy=True, errors=’raise’)
dtype: نوع البيانات الذي نريد تطبيقه على إطار البيانات بأكمله.
copy: يُنشئ نسخة أخرى من مجموعة البيانات لوضع التغييرات عليها
errors: 
من خلال تعيينها على "رفع" ، نسمح برفع الاستثناءات بواسطة الدالة.
إذا لم يكن الأمر كذلك ، فيمكننا تعيينه على "تجاهل". 
"ignore"

  مثال:

import pandas as pd 
data = {
  "Gender":['M','F','F','M','F','F','F'],
  "NAME":['John','Camili','Rheana','Joseph','Amanti','Alexa','Siri']
}
block = pd.DataFrame(data)
print("Original Data frame:\n")
print(block)
block.dtypes

الخرج:

Original Data frame:
 
  Gender    NAME
0      M    John
1      F  Camili
2      F  Rheana
3      M  Joseph
4      F  Amanti
5      F   Alexa
6      F    Siri
 
Gender    object
NAME      object
dtype: object

الآن سنطبق الدالة astype على عمود "الجنس" لتغيير نوع البيانات إلى "object".

block['Gender'] = block['Gender'].astype('category')
block.dtypes

الخرج:

Gender    category
NAME        object
dtype: object

- أما حسب شرح السؤال فيبدو أنك تحتاجين إلى إضافة عمود جديد إلى بياناتك لتصنيف نقاط البيانات (الأسطر) إلى فئات، وكما يبدو فإن التصنيف يعتمد على قيم العمود الثاني.
يمكنك استخدام الحل الذي قدمه الأستاذ وائل في هذه الحالة لكن مؤخراً تم حذفها من بايثون في الإصدارات الجديدة، لذا يمكنك استخدام categorical codes كما يلي:

df = pd.DataFrame({'a' : [1, 2, 3, 4, 5], 'b' : ['yes', 'no', 'yes', 'no', 'absent']})
df['c']=pd.Categorical(df['b']).codes
df
"""
a 	b 	c
0 	1 	yes 	2
1 	2 	no 	1
2 	3 	yes 	2
3 	4 	no 	1
4 	5 	absent 	0
"""

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...