Pandas & NumPy Academy · पाठ

DataFrames पर बूलियन इंडेक्सिंग

किसी स्तंभ पर बूलियन शर्त लागू करके पंक्तियाँ फ़िल्टर कीजिए और & तथा | ऑपरेटरों से अनेक शर्तों को मिलाइए।

पाठ 1, कुल 4 में से13 चरण

DataFrames पर बूलियन इंडेक्सिंग, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

बूलियन इंडेक्सिंग क्या है

बूलियन इंडेक्सिंग ऐसी शर्त लागू करके DataFrame की पंक्तियों को फ़िल्टर करने देती है, जिससे True और False मानों वाली Series बनती है। केवल वे पंक्तियाँ लौटाई जाती हैं जिनमें शर्त True होती है। यह Pandas में सबसे अधिक उपयोग की जाने वाली चयन तकनीकों में से एक है, क्योंकि यह पढ़ने में आसान और तेज़ दोनों है।

उदाहरण के लिए, किसी बिक्री DataFrame में आप लूप लिखे बिना उन सभी पंक्तियों को तुरंत प्राप्त कर सकते हैं जिनमें राजस्व 1000 से अधिक था।

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'revenue': [500, 1500, 800, 2000]
})

# Boolean condition produces a Series of True/False
mask = df['revenue'] > 1000
print(mask)
# 0    False
# 1     True
# 2    False
# 3     True

बूलियन मास्क लागू करना

बूलियन मास्क तैयार होने के बाद, केवल मेल खाने वाली पंक्तियाँ चुनने के लिए उसे DataFrame के वर्गाकार कोष्ठकों के भीतर दें। परिणाम एक नया DataFrame होता है — मूल DataFrame में कभी कोई बदलाव नहीं किया जाता। मूल DataFrame के पंक्ति इंडेक्स सुरक्षित रहते हैं, इसलिए आपको हमेशा पता रहता है कि प्रत्येक पंक्ति कहाँ से आई है।

यह तरीका — मास्क बनाएँ, फिर लागू करें — पंक्तियों को फ़िल्टर करने की मानक Pandas शैली है।

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'revenue': [500, 1500, 800, 2000]
})

mask = df['revenue'] > 1000
filtered = df[mask]
print(filtered)
#   product  revenue
# 1       B     1500
# 3       D     2000

मास्क चर के बिना सीधे शर्तें लगाना

आपको बूलियन Series को किसी चर में असाइन करने की आवश्यकता नहीं है। आप शर्त को सीधे वर्गाकार कोष्ठकों के भीतर inline लिख सकते हैं: df[df['col'] > value]। डेटा विश्लेषण की नोटबुक में यह एक-पंक्ति शैली बहुत सामान्य है, क्योंकि इससे कोड संक्षिप्त और पढ़ने योग्य रहता है।

दोनों तरीके — मास्क चर और inline — एक जैसे परिणाम देते हैं। शर्त जटिल हो या दोबारा उपयोग करनी हो तो चर का उपयोग करें; सरल, एक बार के फ़िल्टर के लिए inline का उपयोग करें।

import pandas as pd

df = pd.DataFrame({
    'city': ['NYC', 'LA', 'Chicago', 'Houston'],
    'population': [8_336_817, 3_979_576, 2_693_976, 2_320_268]
})

# Inline boolean filter
large_cities = df[df['population'] > 3_000_000]
print(large_cities)
#   city  population
# 0  NYC   8336817
# 1   LA   3979576

& (AND) से शर्तें मिलाना

यह आवश्यक करने के लिए कि दोनों शर्तें सत्य हों, उन्हें & ऑपरेटर से मिलाएँ — Python के and कीवर्ड से नहीं, क्योंकि यह ऐरे पर तत्व-दर-तत्व काम नहीं करता। प्रत्येक शर्त को कोष्ठकों में रखना आवश्यक है, क्योंकि & की ऑपरेटर प्राथमिकता तुलना ऑपरेटरों से अधिक होती है।

परिणाम में केवल वे पंक्तियाँ रहती हैं जिनमें हर उप-शर्त का मूल्यांकन True होता है।

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Carol', 'Dave'],
    'age': [25, 35, 28, 45],
    'salary': [50000, 90000, 70000, 120000]
})

# Both conditions must be true
result = df[(df['age'] > 27) & (df['salary'] > 60000)]
print(result)
#     name  age  salary
# 1    Bob   35   90000
# 2  Carol   28   70000

| (OR) से शर्तें मिलाना

उन पंक्तियों को रखने के लिए | ऑपरेटर का उपयोग करें जिनमें कम-से-कम एक शर्त सत्य हो। & की तरह, प्रत्येक उप-शर्त को कोष्ठकों में रखना आवश्यक है। | ऑपरेटर बूलियन ऐरे पर तत्व-दर-तत्व तार्किक OR लागू करता है।

& और | को मिलाना पूरी तरह मान्य है — सही मूल्यांकन क्रम सुनिश्चित करने और सूक्ष्म तर्कगत त्रुटियों से बचने के लिए बस कोष्ठकों का ध्यान रखें।

import pandas as pd

df = pd.DataFrame({
    'product': ['Laptop', 'Mouse', 'Monitor', 'Keyboard'],
    'price': [1200, 25, 300, 80],
    'category': ['Electronics', 'Accessories', 'Electronics', 'Accessories']
})

# Rows where price > 200 OR category is Accessories
result = df[(df['price'] > 200) | (df['category'] == 'Accessories')]
print(result)
#     product  price     category
# 0    Laptop   1200  Electronics
# 1     Mouse     25  Accessories
# 2   Monitor    300  Electronics
# 3  Keyboard     80  Accessories

~ का उपयोग करके किसी शर्त को नकारना

~ टिल्ड ऑपरेटर बूलियन Series को उलट देता है — यह True को False और इसके विपरीत बदल देता है। 'NOT' तर्क व्यक्त करने के लिए ~ का उपयोग करें: ऐसी पंक्तियाँ रखें जो किसी शर्त से मेल नहीं खाती हों। यह विपरीत शर्त को हाथ से बनाने की तुलना में अधिक साफ़ तरीका है।

उदाहरण के लिए, df[~df['status'].isin(['cancelled', 'refunded'])] इन दो स्थितियों को छोड़कर बाकी सभी पंक्तियाँ रखता है।

import pandas as pd

df = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'status': ['shipped', 'cancelled', 'delivered', 'refunded']
})

# Keep only rows that are NOT cancelled
active = df[~(df['status'] == 'cancelled')]
print(active)
#    order_id     status
# 0         1    shipped
# 2         3  delivered
# 3         4   refunded

स्ट्रिंग मानों पर फ़िल्टर लगाना

बूलियन इंडेक्सिंग पाठ वाले स्तंभों पर भी उतनी ही अच्छी तरह काम करती है। आप == से सटीक मिलान कर सकते हैं या लचीले पाठ फ़िल्टर के लिए शर्त के भीतर .str विधियों, जैसे .str.startswith(), .str.contains() या .str.upper() का उपयोग कर सकते हैं।

Pandas में डिफ़ॉल्ट रूप से स्ट्रिंग तुलना अक्षर-रूप के प्रति संवेदनशील होती है, इसलिए 'NYC' और 'nyc' को अलग-अलग मान माना जाता है। आवश्यकता होने पर पहले अक्षर-रूप को सामान्य करें।

import pandas as pd

df = pd.DataFrame({
    'country': ['USA', 'Germany', 'UK', 'USA', 'France'],
    'sales': [400, 200, 150, 600, 300]
})

# Filter rows where country equals USA
us_sales = df[df['country'] == 'USA']
print(us_sales)
#   country  sales
# 0     USA    400
# 3     USA    600

# Filter rows where country starts with 'G'
g_countries = df[df['country'].str.startswith('G')]
print(g_countries)
#    country  sales
# 1  Germany    200

कई स्तंभों पर फ़िल्टर लगाना

जटिल विश्लेषणों में अक्सर कई स्तंभों की शर्तों को & और | से मिलाना पड़ता है। बहुत लंबी शर्तों को पढ़ने में आसानी के लिए नामित बूलियन Series में बाँटें — प्रत्येक Series एक नामित उप-फ़िल्टर की तरह काम करेगी, जिन्हें अंत में मिलाया जा सकता है।

इस तरीके से आपका उद्देश्य स्पष्ट रहता है: प्रत्येक पंक्ति फ़िल्टर तर्क के एक भाग का वर्णन करने वाले हिंदी वाक्य की तरह पढ़ी जाती है।

import pandas as pd

df = pd.DataFrame({
    'region': ['North', 'South', 'North', 'East'],
    'year': [2022, 2023, 2023, 2022],
    'profit': [5000, -200, 8000, 3000]
})

is_north = df['region'] == 'North'
is_2023 = df['year'] == 2023
is_profitable = df['profit'] > 0

result = df[is_north & is_2023 & is_profitable]
print(result)
#   region  year  profit
# 2  North  2023    8000

सशर्त स्तंभों के लिए np.where का उपयोग

बूलियन इंडेक्सिंग पंक्तियों को फ़िल्टर करती है, लेकिन कभी-कभी आप पंक्तियाँ हटाने के बजाय किसी शर्त के आधार पर नया स्तंभ जोड़ना चाहते हैं। np.where(condition, value_if_true, value_if_false) किसी स्तंभ पर तत्व-दर-तत्व लागू होने वाले if/else का वेक्टराइज़्ड समकक्ष है और lambda के साथ apply उपयोग करने की तुलना में बहुत तेज़ है।

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'score': [45, 72, 88, 61, 95]
})

# Create a new column based on a condition
df['grade'] = np.where(df['score'] >= 70, 'Pass', 'Fail')
print(df)
#    score grade
# 0     45  Fail
# 1     72  Pass
# 2     88  Pass
# 3     61  Fail
# 4     95  Pass

फ़िल्टर किए गए उपसमुच्चय को मान असाइन करना

आप .loc[mask, column] की सहायता से फ़िल्टर की गई पंक्तियों के मानों को उसी स्थान पर अपडेट कर सकते हैं। उपसमुच्चय में मान सेट करने का यह सुरक्षित तरीका है — df[mask]['col'] = value जैसे chained indexing से SettingWithCopyWarning उत्पन्न हो सकती है, क्योंकि यह किसी प्रति पर काम करता है।

मूल DataFrame को उसी स्थान पर संशोधित करना हो तो हमेशा df.loc[mask, 'col'] = value को प्राथमिकता दें।

import pandas as pd

df = pd.DataFrame({
    'item': ['A', 'B', 'C', 'D'],
    'stock': [0, 5, 0, 12]
})

# Mark out-of-stock items
df.loc[df['stock'] == 0, 'status'] = 'Out of Stock'
df.loc[df['stock'] > 0, 'status'] = 'Available'
print(df)
#   item  stock        status
# 0    A      0  Out of Stock
# 1    B      5     Available
# 2    C      0  Out of Stock
# 3    D     12     Available

मास्क की गणना और योग करना

चूँकि बूलियन मान अंदरूनी रूप से 1 (True) और 0 (False) होते हैं, इसलिए मेल खाने वाली पंक्तियों की संख्या गिनने के लिए आप मास्क पर .sum() कॉल कर सकते हैं या मेल खाने वाली पंक्तियों के अंश के लिए .mean() उपयोग कर सकते हैं। ये त्वरित गणनाएँ पंक्तियाँ चुनने के लिए फ़िल्टर लागू करने से पहले आपके फ़िल्टर तर्क की जाँच करने में सहायता करती हैं।

import pandas as pd

df = pd.DataFrame({'value': [10, 55, 30, 80, 20, 70]})

mask = df['value'] > 40
print('Count of rows > 40:', mask.sum())      # 3
print('Fraction > 40:', mask.mean().round(2)) # 0.5

# Now apply
print(df[mask])
#    value
# 1     55
# 3     80
# 5     70

त्वरित जाँच

DataFrames पर बूलियन इंडेक्सिंग की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: बूलियन मास्क किसी स्तंभ पर शर्त लागू करके पंक्तियों को फ़िल्टर करते हैं, & और | ऑपरेटर कई शर्तों को मिलाते हैं (Python के and/or नहीं), और ~ NOT तर्क के लिए बूलियन मास्क को उलट देता है। फ़िल्टर की गई पंक्तियों को सुरक्षित रूप से मान असाइन करने के लिए df.loc[mask, col] = value का उपयोग करें। आगे हम पठनीय स्ट्रिंग के रूप में फ़िल्टर लिखने की query() विधि का अध्ययन करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “DataFrames पर बूलियन इंडेक्सिंग” पाठ निःशुल्क है?

हाँ—“DataFrames पर बूलियन इंडेक्सिंग” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“DataFrames पर बूलियन इंडेक्सिंग” में मैं क्या सीखूँगा?

किसी स्तंभ पर बूलियन शर्त लागू करके पंक्तियाँ फ़िल्टर कीजिए और & तथा | ऑपरेटरों से अनेक शर्तों को मिलाइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“DataFrames पर बूलियन इंडेक्सिंग” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. DataFrames पर बूलियन इंडेक्सिंग
  2. query() विधि
  3. isin() और between() फ़िल्टर
  4. पैटर्न के आधार पर कॉलम चुनना
← Pandas & NumPy Academy पर वापस जाएँ