• 0

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

أحاول دمج أعمدة  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
2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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()]

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن