Mohamed Elnemr نشر 1 سبتمبر 2021 أرسل تقرير مشاركة نشر 1 سبتمبر 2021 (معدل) لدي بيانات على شكل dataframe كالتالي: USAF WBAN year month day piece1 piece2 temp sum sum max min 0 702730 26451 1993 1 1 0 13 30.92 24.98 1 702730 26451 1993 1 2 0 13 32.00 24.98 2 702730 26451 1993 1 3 10 13 23.00 6.98 3 702730 26451 1993 1 4 0 13 10.04 3.92 4 702730 26451 1993 1 5 0 13 19.94 10.94 أريد أن أقوم بتسطيحها بحيث تصبح على الشكل التالي: USAF WBAN year month day piece1 piece2 temp_max temp_min 0 702730 26451 1993 1 1 0 12 30.92 24.98 1 702730 26451 1993 1 2 0 13 32.00 24.98 2 702730 26451 1993 1 3 10 2 23.00 6.98 3 702730 26451 1993 1 4 0 12 10.04 3.92 4 702730 26451 1993 1 5 0 10 19.94 10.94 كيف يمكنني فعل هذا؟ تم التعديل في 1 سبتمبر 2021 بواسطة Mohamed Elnemr 3 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Ahmed Sharshar نشر 1 سبتمبر 2021 أرسل تقرير مشاركة نشر 1 سبتمبر 2021 (معدل) أسهل طريقة لفعل هذا هي بجعل الأعمدة في المستوى الثاني تقع في الامسوتى الأول كالتالي: df.columns = df.columns.get_level_values(0) اما اذا أردت دمج عدة أعمدة فرعية في عمود واحدة، كأخر عمودين في المثال الخاص بك، يمكن أن ستتخدم الكود التالي: df.columns = [' '.join(col).strip() for col in df.columns.values] أنظر تطبيقه على المثال الخاص بك في فصل الأعمدة: In [11]: [' '.join(col).strip() for col in df.columns.values] Out[11]: ['USAF', 'WBAN', 'day', 'month', 'piece1 sum', 'piece2 sum', 'temp max', 'temp min', 'year'] تم التعديل في 1 سبتمبر 2021 بواسطة Ahmed Sharshar اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 عبدالباسط ابراهيم نشر 2 سبتمبر 2021 أرسل تقرير مشاركة نشر 2 سبتمبر 2021 بداية من نسخة panda 0.24.0 ، يمكنك استخدام الدالة .to_flat_index والتي تقوم بتنفيذ المطلوب كما في المثال التالي dat = df.loc[:,['name','workshop_period','class_size']].groupby(['name','workshop_period']).describe() print(dat.columns) # MultiIndex(levels=[['class_size'], ['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max']], # codes=[[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6, 7]]) dat.columns = dat.columns.to_flat_index() print(dat.columns) # Index([('class_size', 'count'), ('class_size', 'mean'), # ('class_size', 'std'), ('class_size', 'min'), # ('class_size', '25%'), ('class_size', '50%'), # ('class_size', '75%'), ('class_size', 'max')], # dtype='object') وللفصل بين اسماء الأعمدة يمكنك استخدام الحل التالي dat.columns = ["_".join(a) for a in dat.columns.to_flat_index()] 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Ali Haidar Ahmad نشر 2 سبتمبر 2021 أرسل تقرير مشاركة نشر 2 سبتمبر 2021 هذا الكود البسيط يكفي: df.columns = [''.join(t) for t in df.columns] df أو: df.columns = ['_'.join(tup).rstrip('_') for tup in df.columns.values] df """ USAF WBAN day month s_CDsum s_CLsum s_CNTsum s_PCsum tempfamax tempfamin year 0 702730 26451 1 1 12.0 0.0 13.0 1.0 30.92 24.98 1993 1 702730 26451 2 1 13.0 0.0 13.0 0.0 32.00 24.98 1993 2 702730 26451 3 1 2.0 10.0 13.0 1.0 23.00 6.98 1993 3 702730 26451 4 1 12.0 0.0 13.0 1.0 10.04 3.92 1993 4 702730 26451 5 1 10.0 0.0 13.0 3.0 19.94 10.94 1993 """ أو بالشكل التالي: mi = df.columns #MultiIndex نقوم باستخلاص ال mi """ MultiIndex([( 'USAF', ''), ( 'WBAN', ''), ( 'day', ''), ('month', ''), ( 's_CD', 'sum'), ( 's_CL', 'sum'), ('s_CNT', 'sum'), ( 's_PC', 'sum'), ('tempf', 'amax'), ('tempf', 'amin'), ( 'year', '')], ) """ # نحولها لقائمة mi.tolist() """ [('USAF', ''), ('WBAN', ''), ('day', ''), ('month', ''), ('s_CD', 'sum'), ('s_CL', 'sum'), ('s_CNT', 'sum'), ('s_PC', 'sum'), ('tempf', 'amax'), ('tempf', 'amin'), ('year', '')] """ # نحولها الآن لفهرس ind = pd.Index([e[0] + e[1] for e in mi.tolist()]) ind # نسندها للأعمدة df.columns = ind df """ USAF WBAN day month s_CDsum s_CLsum s_CNTsum s_PCsum tempfamax tempfamin year 0 702730 26451 1 1 12.0 0.0 13.0 1.0 30.92 24.98 1993 1 702730 26451 2 1 13.0 0.0 13.0 0.0 32.00 24.98 1993 2 702730 26451 3 1 2.0 10.0 13.0 1.0 23.00 6.98 1993 3 702730 26451 4 1 12.0 0.0 13.0 1.0 10.04 3.92 1993 4 702730 26451 5 1 10.0 0.0 13.0 3.0 19.94 10.94 1993 """ 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Mohamed Elnemr
لدي بيانات على شكل dataframe كالتالي:
أريد أن أقوم بتسطيحها بحيث تصبح على الشكل التالي:
كيف يمكنني فعل هذا؟
تم التعديل في بواسطة Mohamed Elnemrرابط هذا التعليق
شارك على الشبكات الإجتماعية
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.