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

دمج أكثر من عمود في dataframe بفواصل مختلفة في pandas

Mohamed Elnemr

السؤال

أحاول دمج أعمدة  dataframes بحيث تكون عمود جديد شكلة مختلفة عن الأعمدة الموجودة لكنه يتكون في الأساس منهم رغم إختلاف الرموز tokens.

كمثال لدي تلك البيانات على شكل dataframe:

dataframe = pd.DataFrame({'col_1' : ['a','b','c','d'], 
                          'col_2' : ['name_a','name_b','name_c','name_d'], 
                          'col_3' : ['age_a','age_b','age_c','age_d']})

وأود أن يتم دمجها بحيث تخرج بالشكل التالي:

    features
0   a <0> name_a <1> age_a
1   b <0> name_b <1> age_b
2   c <0> name_c <1> age_c
3   d <0> name_d <1> age_d

مع مراعاة عدم التغيير في البيانات الأصلية. كيف أقوم بفعل هذا؟

تم التعديل في بواسطة Mohamed Elnemr
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك إستخدام المكتبة itertools بحيث تقوم بعمل عمود جديد عبارة عن مزيج من الأعمدة الأخرى بالشكل الذي تريده.

الكود التالي يوضح كيف يمكن أن تقوم بها:

from itertools import chain

dataframe['features'] = dataframe.apply(lambda x: ''.join([*chain.from_iterable((v, f' <{i}> ') for i, v in enumerate(x))][:-1]), axis=1)

print(dataframe)

ويكون شكل الخرج هو:

  col_1  col_2  col_3         features
0   a  name_a  age_a  a <0> name_a <1> age_a
1   b  name_b  age_b  b <0> name_b <1> age_b
2   c  name_c  age_c  c <0> name_c <1> age_c
3   d  name_d  age_d  d <0> name_d <1> age_d

حيث قمنا بإنشاء العمود features والذي يحتوى شكل البيانات التي تريد.

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

  • 0

يمكنك فعل ذلك من خلال استخدام itertools كالتالي

from itertools import chain

dataframe['features'] = dataframe.apply(lambda x: ''.join([*chain.from_iterable((v, f' <{i}> ') for i, v in enumerate(x))][:-1]), axis=1)

print(dataframe)

سوف يكون الناتج كالتالي

  col_1     	col_2    col_3       features
0   a  		name_a  job_a  		a <0> name_a <1> job_a
1   b  		name_b  job_b  		b <0> name_b <1> job_b
2   c  		name_c  job_c  		c <0> name_c <1> job_c
3   d  		name_d  job_d  		d <0> name_d <1> job_d

 

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

  • 0

يمكنك أيضاً استخدام الدالة df.agg:

dataframe = pd.DataFrame({'col_1' : ['a','b','c','d'], 
                          'col_2' : ['name_a','name_b','name_c','name_d'], 
                          'col_3' : ['age_a','age_b','age_c','age_d']})
dataframe['features'] = dataframe.agg(
    lambda s: r' <{}> '.join(s).format(*range(s.size)), axis=1)
"""
 	  col_1 	col_2 	col_3 	features
0 	a 	name_a 	age_a 	a <0> name_a <1> age_a
1 	b 	name_b 	age_b 	b <0> name_b <1> age_b
2 	c 	name_c 	age_c 	c <0> name_c <1> age_c
3 	d 	name_d 	age_d 	d <0> name_d <1> age_d
"""

أو بشكل يدوي معقد قليلاً:

dataframe = pd.DataFrame({'col_1' : ['a','b','c','d'], 
                          'col_2' : ['name_a','name_b','name_c','name_d'], 
                          'col_3' : ['age_a','age_b','age_c','age_d']})
dataframe['features'] = [" ".join(F"{entry}<{num}>" 
                  if ent[-1] != entry 
                  else entry 
                  for num, entry in enumerate(ent) )
                  for ent in dataframe.to_numpy()]

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...