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

السؤال

نشر

في لغة 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...