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

الحصول على الصفوف غير المشتركة بين اثنان dataframes في pandas

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

كيف يمكنني فعل هذا؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك استخدام الحل التالي

  • نقوم بحذف العناصر المتشابه من 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

في الواقع هناك طريقيتين سهلتين للحصول على الفرق بين 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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

حلول أخرى:

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
"""

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...