• 0

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

في لغة 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, كيف يمكن فعل ذلك؟

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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
"""

 

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن