Mohamed Elnemr نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 لدي بيانات على هيئة اثنان dataframes كالتالي: df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [6, 7, 8, 9, 10]}) df2 = pandas.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [6, 7, 8]}) df1 col1 col2 0 1 6 1 2 7 2 3 8 3 4 9 4 5 10 df2 col1 col2 0 1 6 1 2 7 2 3 8 وأريد الحصول على الصفوف التي تحتوى قيماً غير مشتركة بين الاثنتين بحيث يكون كالتالي: col1 col2 3 4 9 4 5 10 كيف يمكنني فعل هذا؟ 2 اقتباس
0 Ahmed Sharshar نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 في الواقع هناك طريقيتين سهلتين للحصول على الفرق بين dataframes: الأولى عن طريق جمع الاثنين معا ثم اختيار العناصر التي لا تشتركان فيهم سوياً كالتالي: In [2]: common = df1.merge(df2,on=['col1','col2']) print(common) col1 col2 0 1 6 1 2 7 2 3 8 df1[(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))] Out[2]: col1 col2 3 4 9 4 5 10 الثانية عن طريق اختيار العناصر التي لا تتواجد في ال dataframe الصغيرة باستخدام الدالة isin كالتالي: In [3]: df1[~df1.isin(df2)].dropna() Out[3]: col1 col2 3 4 9 4 5 10 لاحظ استخدام العلامة ~ والتي تعني not او النفي، وهنا تعني "غير متواجد" أي تختار العناصر من df1 غير المتواجدة في df2 1 اقتباس
0 عبدالباسط ابراهيم نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 يمكنك استخدام الحل التالي نقوم بحذف العناصر المتشابه من df2 ثم نقوم بعمل merge لل df1 مع df2 كما في المثال التالي df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3], 'col2' : [10, 11, 12, 13, 14, 10]}) df2 = pd.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]}) df_all = df1.merge(df2.drop_duplicates(), on=['col1','col2'], how='left', indicator=True) الناتج يكون كالتالي df_all col1 col2 _merge 0 1 10 both 1 2 11 both 2 3 12 both 3 4 13 left_only 4 5 14 left_only 5 3 10 left_only العناصر الغير مشتركة تكون كما في الناتج ليست both اقتباس
0 Ali Haidar Ahmad نشر 4 سبتمبر 2021 أرسل تقرير نشر 4 سبتمبر 2021 (معدل) حلول أخرى: import pandas as pd df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3], 'col2' : [10, 11, 12, 13, 14, 10]}) """ col1 col2 0 1 10 1 2 11 2 3 12 3 4 13 4 5 14 5 3 10 """ df2 = pd.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]}) df2 """ col1 col2 0 1 10 1 2 11 2 3 12 """ # الطريقة 1 # نحدد الأسطر الغير مشتركة uncommon_indices = np.setdiff1d(df1.index.values, df2.index.values) # array([3, 4, 5]) # نقوم باستخلاصها df1.loc[uncommon_indices,:] """ col1 col2 3 4 13 4 5 14 5 3 10 """ # الطريقة 2 df1[~df1.index.isin(df1.merge(df2, how='inner', on=['col1', 'col2']).index)] """ col1 col2 3 4 13 4 5 14 5 3 10 """ # الشرح خطوة بخطوة # تطبيق الدمج الداخلي للحصول على العناصر المشتركة بين إطاري البيانات res1=df1.merge(df2, how='inner', on=['col1', 'col2']) res1 """ col1 col2 0 1 10 1 2 11 2 3 12 """ #في الأماكن التي لاتتواجد فيها False في أماكن تواجد هذه الفهارس و True بحيث تضع isin استخدام الدالة #في الأسطر غير المشتركة True ثم استخدام عملية النفي ليتم وضع res2=~df1.index.isin(res1.index) res2 # array([False, False, False, True, True, True]) # الآن نستخلصها df1[res2] """ col1 col2 3 4 13 4 5 14 5 3 10 """ # الطريقة 3 df = pd.merge(df1, df2, how='outer', suffixes=('','_y'), indicator=True) df[df['_merge']=='left_only'][df1.columns] """ col1 col2 3 4 13 4 5 14 5 3 10 """ تم التعديل في 4 سبتمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
السؤال
Mohamed Elnemr
لدي بيانات على هيئة اثنان dataframes كالتالي:
df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [6, 7, 8, 9, 10]}) df2 = pandas.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [6, 7, 8]}) df1 col1 col2 0 1 6 1 2 7 2 3 8 3 4 9 4 5 10 df2 col1 col2 0 1 6 1 2 7 2 3 8
وأريد الحصول على الصفوف التي تحتوى قيماً غير مشتركة بين الاثنتين بحيث يكون كالتالي:
col1 col2 3 4 9 4 5 10
كيف يمكنني فعل هذا؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.