Mohamed Elnemr نشر 1 سبتمبر 2021 أرسل تقرير نشر 1 سبتمبر 2021 لدي بيانات على هيئة اثنان dataframes كالتالي: from pandas import DataFrame df1 = DataFrame({'col1':[a,b],'col2':[c,d]}) df2 = DataFrame({'col3':[e,f]}) أريد ضرب كلا ال dataframes بحيث يكون على الخرج على هذا الشكل: col1 col2 col3 0 a c e 1 a c f 2 b d e 3 b d f كيف يمكنني فعل هذا؟ 2 اقتباس
0 Ahmed Sharshar نشر 1 سبتمبر 2021 أرسل تقرير نشر 1 سبتمبر 2021 في pandas النسخة بداية من 1.2 أو أحدث، يمكنك استخدام الدالة merge مباشرة حيث توفر تلك الخاصية كالتالي: from pandas import DataFrame df1 = DataFrame({'col1':[a,b],'col2':[c,d]}) df2 = DataFrame({'col3':[e,f]}) df1.merge(df2, how='cross') أما في النسخ الأقدم فيجب تعريف الضرب بشكل خاص كما نفعل في الضرب في SQL بحيث نقوم بعملية الضرب على المفتاح key الذي يجب أن يكون متشابها بين الأعمدة كالتالي: from pandas import DataFrame, merge df1 = DataFrame({'key':[1,1], 'col1':[a,b],'col2':[c,d]}) df2 = DataFrame({'key':[1,1], 'col3':[e,f]}) merge(df1, df2,on='key')[['col1', 'col2', 'col3']] وفي الحالتين يكون الخرج كالتالي: col1 col2 col3 0 a c e 1 a c f 2 b d e 3 b d f 1 اقتباس
0 Ali Haidar Ahmad نشر 1 سبتمبر 2021 أرسل تقرير نشر 1 سبتمبر 2021 (معدل) يمكنك القيام بذلك من خلال الدالة merge لكن في البداية يجب أن تضيف مفتاح لكي تتم عملية الدمج عليه كالتالي: df1['key'] = 0 df2['key'] = 0 df1.merge(df2, how='left',on = 'key').drop(columns=['key']) """ col1 col2 col3 0 1 3 5 1 1 3 6 2 2 4 5 3 2 4 6 """ df1['key'] = 0 df2['key'] = 0 df1.merge(df2, how='left',on = 'key').drop(columns=['key']) """ col1 col2 col3 0 1 3 5 1 1 3 6 2 2 4 5 3 2 4 6 """ # أو df1.merge(df2, how='outer').drop(columns=['key']) # حسبما تريد # لكن بالضرورة يجب أن تضيف مفتاح أو من خلال التابع التالي: import pandas as pd def cartesian(df1, df2): key = 'key' while key in df1.columns or key in df2.columns: key = '_' + key key_d = {key: 0} return pd.merge(df1.assign(**key_d), df2.assign(**key_d), on=key).drop(key, axis=1) cartesian(df1, df2) """ col1 col2 col3 0 1 3 5 1 1 3 6 2 2 4 5 3 2 4 6 """ تم التعديل في 1 سبتمبر 2021 بواسطة Ali Haidar Ahmad اقتباس
0 عبدالباسط ابراهيم نشر 2 سبتمبر 2021 أرسل تقرير نشر 2 سبتمبر 2021 يمكنك استخدام التابع pd.MultiIndex.from_product ك index في dataframe جديد ثم عمل reset لل index كما في المثال التالي a = [1, 2, 3] b = ["a", "b", "c"] index = pd.MultiIndex.from_product([a, b], names = ["a", "b"]) pd.DataFrame(index = index).reset_index() الناتج يكون كالتالي a b 0 1 a 1 1 b 2 1 c 3 2 a 4 2 b 5 2 c 6 3 a 7 3 b 8 3 c 1 اقتباس
السؤال
Mohamed Elnemr
لدي بيانات على هيئة اثنان dataframes كالتالي:
أريد ضرب كلا ال dataframes بحيث يكون على الخرج على هذا الشكل:
col1 col2 col3 0 a c e 1 a c f 2 b d e 3 b d f
كيف يمكنني فعل هذا؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.