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

اختيار عناصر محددة داخل dataframe باستخدام in في pandas

Mohamed Elnemr

السؤال

في لغة SQL ، يوجد طريقة لإختيار عناصر محددة باستخدام IN أو NOT IN وأريد تطبيق نفس الطريقة على dataframe في pandas.

لدي الكود التالي:

df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
countries_to_keep = ['UK', 'China']

#طريقتي
df[df['country'] not in countries_to_keep]

أريد إيجاد طريقة لأختبار تواجد عناصر  داخل countries_to_keep حيث تكون الاجابة ب  true او false, كيف يمكن فعل ذلك؟

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

Recommended Posts

  • 0

في pandas ، توجد دالة مشابهة ل IN التي توجد في SQL تسمي  pd.Series.isin.

من أجل اختيار أو اختبار وجود عناصر داخل dataframe عن طريق السطر الأتى:

something.isin(somewhere)

المثال التالي يوضح استخدام تلك الدالة في حل مشلكتك:

import pandas as pd

>>> df
  country
0        US
1        UK
2   Germany
3     China
>>> countries_to_keep
['UK', 'China']
>>> df.country.isin(countries_to_keep)
0    False
1     True
2    False
3     True
Name: country, dtype: bool

لاحظ أننا قمنا بإختبار تواجد العناصر التي في countries_to_keep بداخل country، والعناصر الموجودة بداخلها تظهر امامها True وغير الموجودة ب False.

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

  • 0

البيانات لدينا من الشكل:

import pandas as pd
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
print("Given Dataframe is :\n",df)
"""
Given Dataframe is :
         country
0     US blabla
1   US adfv fda
2  Germany adce
3         China
"""

ونريد فلترة هذه البيانات على أساس الفلتر التالي:

countries_to_keep = ['UK', 'China']

أي نريد أن نترك البلدان UK و China، وهذا سيتم كالتالي من خلال الاستعانة بالدالة isin (تكافئ حالة in في SQL) بحيث ستضع True في الأماكن التي تتواجد فيها هذه القيم و False في باقي المناطق:

filter=df.country.isin(countries_to_keep)
filter
"""
0    False
1     True
2    False
3     True
Name: country, dtype: bool
"""

وبالاستعان بمبادئ بايثون نطبق الفلتر:

df[filter]
"""
 	country
1 	UK
3 	China
"""

أما إذا أردت تطبيق المفهوم العكسي أي not in فهذا يقابله فقط استخدام المعامل ~ قبل isin كالتالي:

countries_to_keep = ['UK', 'China']
filter=~df.country.isin(countries_to_keep)
filter
"""
0     True
1    False
2     True
3    False
"""
df[filter]
"""
country
0 	US
2 	Germany
"""

أو يمكنك استخدام الشكل الدالة query الرائعة مباشرةً:

df.query("country in @countries_to_keep")
"""
country
1 	UK
3 	China
"""
df.query("country not in @countries_to_keep")
"""
country
0 	US
2 	Germany
"""

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...