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

السؤال

نشر

لدي البيانات التالية في 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...