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 اقتباس
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 اقتباس
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 اقتباس
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 اقتباس
السؤال
Mohamed Elnemr
لدي بيانات على شكل dataframe كالتالي:
أريد أن أقوم بتسطيحها بحيث تصبح على الشكل التالي:
كيف يمكنني فعل هذا؟
تم التعديل في بواسطة Mohamed Elnemr3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.