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

إستخدام groupby لدمج العناصر بوجود الفاصل - في pandas

Mohamed Elnemr

السؤال

لدي البيانات التالية في pandas على هيئة dataframe كالتالي:

col1  animal
A     Cat
A     Dog
B     Bird
B     Bat

وأود أن أدمج العناصر التي لها نفس القيمة في العمود col1 بحيث تصبح على الشكل التالي:

A Cat-Dog
B Bird-Bat

حاولت استخدام الكود التالي:

group = df.groupby(['col1'])['animal'].sum().apply(lambda x: '-'.join(x))

لكن الشكل الخارج يكون مختلفاً عما أريد:

A C-a-t-T-i-g-e-r
B B-a-l-l-B-a-t

كيف يمكنني أن اظهرها بالشكل السليم؟

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

Recommended Posts

  • 0

يمكنك استخدام groupby مع الدالة agg لدمج عناصر عمودين سوياً بالشكل الذي تريد كالتالي:

In [48]: df.groupby('col1')['animal'].agg('-'.join)
Out[48]:
col1
A     Cat-Dog
B     Bird-Bat
Name: val, dtype: object

أو يمكنك انشاء dataframe جديدة وضم الأعمدة المدمجة لها بالكود التالي:

df1 = df.groupby('col1')['animal'].agg('-'.join).reset_index(name='new')

 

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

  • 0

أيضاً من خلال استخدام الدالة apply كالتالي، وهي الطريقة الأبسط:

import pandas as pd
df = pd.DataFrame({'Year': ['1', '1','2','2'], 'month': ['june', 'july','june','july']})
df
"""
Year 	month
0 	1 	june
1 	1 	july
2 	2 	june
3 	2 	july
"""
df.groupby(["Year"])["month"].apply('-'.join)
"""
Year
1    june-july
2    june-july
Name: month, dtype: object
"""

أو عن طريق استخدام lambda مع الدالة agg كالتالي:

df.groupby('Year').agg(lambda x : '-'.join(set(x)))
"""
month
Year 	
1 	july-june
2 	july-june
"""

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...