Pandas & NumPy Academy · पाठ

MultiIndex बनाना

pd.MultiIndex.from_tuples या अनेक कॉलमों पर set_index से पदानुक्रमित पंक्ति इंडेक्स बनाएँ और उसके स्तरों की जाँच करें।

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

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

MultiIndex क्या है

MultiIndex (जिसे पदानुक्रमित अनुक्रमणिका भी कहा जाता है) किसी Pandas DataFrame या Series में पंक्ति लेबल के कई स्तर रखने की सुविधा देता है। इसे डेटाबेस की संयुक्त कुंजी की तरह समझें: किसी पंक्ति की पहचान एकल लेबल से करने के बजाय, उसकी पहचान (देश, शहर) या (वर्ष, तिमाही) जैसे टपल से की जाती है। पैनल डेटा, क्रॉस-सेक्शनल टाइम सीरीज़ और स्वाभाविक रूप से दो-स्तरीय समूह संरचना वाले किसी भी डेटासेट को दर्शाने के लिए MultiIndexes आवश्यक हैं।

import pandas as pd

# A simple example: sales by country and city
data = {
    'sales': [100, 200, 150, 300, 80, 120]
}
index = pd.MultiIndex.from_tuples(
    [('USA', 'New York'), ('USA', 'Chicago'),
     ('UK', 'London'), ('UK', 'Manchester'),
     ('DE', 'Berlin'), ('DE', 'Munich')],
    names=['country', 'city']
)
df = pd.DataFrame(data, index=index)
print(df)

from_tuples से MultiIndex बनाना

pd.MultiIndex.from_tuples(list_of_tuples, names=) MultiIndex बनाने का सबसे स्पष्ट तरीका है। प्रत्येक टपल एक पंक्ति लेबल बनता है और उसके तत्व स्तर बन जाते हैं। names पैरामीटर प्रत्येक स्तर को एक लेबल देता है (जैसे ['year', 'quarter'])। यह तरीका तब उपयोगी है जब आपके पास संयुक्त कुंजियों की पहले से बनी सूची हो, जिसे आप पंक्ति अनुक्रमणिका के रूप में उपयोग करना चाहते हों।

import pandas as pd

# Multi-level time index: year x quarter
tuples = [
    (2022, 'Q1'), (2022, 'Q2'), (2022, 'Q3'), (2022, 'Q4'),
    (2023, 'Q1'), (2023, 'Q2'), (2023, 'Q3'), (2023, 'Q4')
]
mi = pd.MultiIndex.from_tuples(tuples, names=['year', 'quarter'])
revenue = [120, 135, 145, 160, 130, 148, 162, 175]
df = pd.Series(revenue, index=mi, name='revenue_M')
print(df)

from_product से MultiIndex बनाना

pd.MultiIndex.from_product(iterables, names=) कई सूचियों के कार्तीय गुणनफल से MultiIndex बनाता है—अर्थात इनपुट सूचियों के तत्वों के सभी संयोजन। जब आपके डेटा में सभी स्तरों के सभी संयोजन होने चाहिए, तब यह सबसे सुविधाजनक तरीका है। उदाहरण के लिए, 3 वर्षों × 4 तिमाहियों × 5 क्षेत्रों के सभी संयोजनों से 60-पंक्ति वाला संतुलित पैनल अपने-आप बन जाता है।

import pandas as pd
import numpy as np

years = [2021, 2022, 2023]
quarters = ['Q1', 'Q2', 'Q3', 'Q4']

# Cartesian product: 3 years x 4 quarters = 12 combinations
mi = pd.MultiIndex.from_product([years, quarters], names=['year', 'quarter'])
print('Number of index entries:', len(mi))
print('First 6 entries:', mi[:6].tolist())

# Create a DataFrame with this index
df = pd.DataFrame({'revenue': np.random.randint(100, 200, 12)}, index=mi)
print('\n', df.head())

set_index से MultiIndex बनाना

व्यवहार में MultiIndex बनाने का सबसे सामान्य तरीका है कि पहले समूह बनाने वाले कॉलमों वाला एक सामान्य DataFrame लें, फिर df.set_index([col1, col2]) चलाएँ। इससे वे कॉलम डेटा कॉलमों से अनुक्रमणिका के स्तरों में बदल जाते हैं। परिणाम वही होता है जो from_tuples से शुरू से अनुक्रमणिका बनाने पर मिलता, लेकिन सारणीबद्ध डेटा से शुरू करने पर इसमें केवल एक पंक्ति लगती है।

import pandas as pd

# Start with a flat DataFrame
df_flat = pd.DataFrame({
    'country': ['USA', 'USA', 'UK', 'UK', 'DE', 'DE'],
    'year': [2022, 2023, 2022, 2023, 2022, 2023],
    'gdp_bn': [25000, 26000, 3100, 3200, 4200, 4350]
})

# Promote two columns to a MultiIndex
df = df_flat.set_index(['country', 'year'])
print(df)
print('\nIndex type:', type(df.index).__name__)
print('Index names:', df.index.names)

MultiIndex स्तरों का निरीक्षण करना

MultiIndex अपने डेटा को levels (प्रत्येक स्तर के विशिष्ट मान) और codes (स्तर सारणियों की ओर संकेत करने वाले पूर्णांक) में संग्रहीत करता है। स्तरों का निरीक्षण df.index.levels या df.index.get_level_values(level) से करें। कितने स्तर मौजूद हैं, यह जाँचने के लिए df.index.nlevels का उपयोग करें। names विशेषता प्रत्येक स्तर को दिया गया नाम सूचीबद्ध करती है—इन्हें df.index.set_names(['level0', 'level1']) से निर्धारित करें।

import pandas as pd

df_flat = pd.DataFrame({
    'country': ['USA', 'USA', 'UK', 'UK'],
    'year': [2022, 2023, 2022, 2023],
    'gdp': [25000, 26000, 3100, 3200]
})
df = df_flat.set_index(['country', 'year'])

print('Number of levels:', df.index.nlevels)
print('Level names:', df.index.names)
print('Level 0 values:', df.index.get_level_values(0).tolist())
print('Level 1 values:', df.index.get_level_values(1).tolist())
print('Unique level 0:', df.index.get_level_values('country').unique().tolist())

कॉलमों पर MultiIndex

MultiIndex को कॉलमों पर भी लागू किया जा सकता है, जिससे कॉलम लेबलों का पदानुक्रम बनता है। पिवट-शैली के लेआउट में प्रत्येक श्रेणी के लिए कई मेट्रिक संग्रहीत करने पर यह सामान्य है—जैसे (राजस्व, Q1), (राजस्व, Q2), (लागत, Q1), (लागत, Q2)। कॉलमों तक उसी तरह पहुँचें जैसे पंक्तियों तक पहुँचते हैं—टपल का उपयोग करके। pd.MultiIndex.from_product से कॉलम MultiIndex बनाएँ और उसे df.columns को सौंपें।

import pandas as pd
import numpy as np

# Create a DataFrame with MultiIndex columns
metrics = ['revenue', 'cost']
quarters = ['Q1', 'Q2', 'Q3', 'Q4']

col_index = pd.MultiIndex.from_product([metrics, quarters], names=['metric', 'quarter'])
data = np.random.randint(50, 200, size=(3, 8))
df = pd.DataFrame(data, columns=col_index, index=['USA', 'UK', 'DE'])
df.index.name = 'country'
print(df)

GroupBy समुच्चयन के बाद MultiIndex

जब आप groupby([col1, col2]).agg(...) चलाते हैं, तो परिणामी DataFrame की पंक्तियों पर MultiIndex होता है (दोनों groupby कुंजियाँ दो अनुक्रमणिका स्तर बन जाती हैं) और उसके कॉलमों पर भी MultiIndex हो सकता है (यदि आप कई मेट्रिक का समुच्चयन करते हैं)। दैनिक डेटा विश्लेषण में MultiIndex मिलने का यह सबसे सामान्य तरीका है—groupby परिणामों के साथ काम करने के लिए उसमें नेविगेट करना समझना आवश्यक है।

import pandas as pd
import seaborn as sns

tips = sns.load_dataset('tips')

# Two-key groupby creates a MultiIndex on rows
result = tips.groupby(['day', 'time'])['total_bill'].agg(['mean', 'count'])
print(result)
print('\nIndex type:', type(result.index).__name__)
print('Index names:', result.index.names)

स्तरों की अदला-बदली और पुनर्व्यवस्था

दो अनुक्रमणिका स्तरों की अदला-बदली के लिए df.swaplevel() और सभी स्तरों का क्रम बदलने के लिए df.reorder_levels([...]) का उपयोग करें। पुनर्व्यवस्था तब उपयोगी होती है जब आप पहले किसी आंतरिक स्तर पर स्लाइस करना चाहते हों, या जब दो DataFrame में अनुक्रमणिका स्तर अलग-अलग क्रम में हों और विलय से पहले उन्हें संरेखित करना आवश्यक हो। पुनर्व्यवस्था के बाद कुशल स्लाइसिंग के लिए वर्णक्रमानुसार क्रम बहाल करने हेतु हमेशा sort_index() चलाएँ।

import pandas as pd
import seaborn as sns

tips = sns.load_dataset('tips')
result = tips.groupby(['day', 'time'])['total_bill'].mean()
print('Original levels:', result.index.names)

# Swap so time is the outer level
swapped = result.swaplevel().sort_index()
print('\nSwapped levels:', swapped.index.names)
print(swapped.head())

MultiIndex की जाँच और क्रमबद्ध करना

MultiIndex में स्लाइसिंग तभी कुशल होती है जब अनुक्रमणिका वर्णक्रमानुसार क्रमबद्ध हो। df.index.is_monotonic_increasing से जाँचें कि अनुक्रमणिका क्रमबद्ध है या नहीं। यदि यह False लौटाए, तो df.sort_index() से क्रमबद्ध करें। क्रमबद्ध न किया गया MultiIndex स्लाइस ऑपरेशनों पर PerformanceWarning उत्पन्न करता है और कुछ विशेष स्थितियों में गलत परिणाम दे सकता है—MultiIndex बनाने या उसमें बदलाव करने के बाद हमेशा उसे क्रमबद्ध करें।

import pandas as pd

# Create an unsorted MultiIndex deliberately
tuples = [('B', 2), ('A', 1), ('B', 1), ('A', 2)]
mi = pd.MultiIndex.from_tuples(tuples, names=['letter', 'num'])
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=mi)

print('Is sorted:', df.index.is_monotonic_increasing)
print('Before sorting:')
print(df)

df_sorted = df.sort_index()
print('\nAfter sorting:')
print(df_sorted)
print('Is sorted:', df_sorted.index.is_monotonic_increasing)

MultiIndex को फिर से कॉलमों में बदलना

सभी इंडेक्स स्तरों को फिर से सामान्य कॉलम में बदलने के लिए df.reset_index() कॉल करें। इससे DataFrame में साधारण पूर्णांक वाला RangeIndex रह जाता है। groupby एग्रीगेशन के बाद यह एक सामान्य तरीका है: MultiIndex के साथ समूहित सारांश निकालें, फिर इंडेक्स रीसेट करके एक सपाट DataFrame प्राप्त करें, जो आगे Pandas ऑपरेशन, मर्ज करने या CSV में निर्यात करने के लिए उपयुक्त हो। दो-स्तरीय इंडेक्स में केवल एक स्तर रीसेट करने के लिए reset_index(level='name') का उपयोग करें।

import pandas as pd
import seaborn as sns

tips = sns.load_dataset('tips')
result = tips.groupby(['day', 'time'])['total_bill'].mean()
print('MultiIndex result:')
print(result.head(4))

# Flatten back to a regular DataFrame
flat = result.reset_index()
print('\nFlattened DataFrame:')
print(flat.head(4))
print('Index type:', type(flat.index).__name__)

MultiIndex का उपयोग कब करें

जब आपके डेटा में स्वाभाविक पदानुक्रमित संरचना हो, तब MultiIndex का उपयोग करें: दिन के भीतर छोटे-छोटे समयांतराल वाली समय-श्रृंखलाएँ (तारीख + घंटा), पैनल डेटा (इकाई + समयावधि), या नेस्टेड समूह (देश + क्षेत्र + शहर)। साधारण दो-कॉलम वाले समूह-कुंजी के लिए MultiIndexes से बचें, जब अलग-अलग कॉलम वाला सपाट DataFrame उतना ही स्पष्ट हो। यदि डेटा तक पहुँचने के लिए आपको बार-बार केवल reset_index() कॉल करना पड़ता है, तो यह संकेत है कि आपके कार्यप्रवाह में MultiIndex कोई अतिरिक्त लाभ नहीं दे रहा है।

त्वरित जाँच

इस पाठ में MultiIndex बनाने की अपनी समझ जाँचें।

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

इस पाठ में आपने सीखा: MultiIndexes, टपल का उपयोग करके पदानुक्रमित पंक्ति (या कॉलम) लेबल प्रदान करते हैं। इन्हें कई कॉलम पर from_tuples, from_product या set_index से बनाया जाता है और कुशल स्लाइसिंग के लिए हमेशा क्रमबद्ध किया जाता है। आगे हम सीखेंगे कि .loc, टपल, स्लाइस और IndexSlice सहायक की मदद से MultiIndex से डेटा कैसे चुना जाता है।

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

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

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

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

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

क्या “MultiIndex बनाना” पाठ निःशुल्क है?

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

“MultiIndex बनाना” में मैं क्या सीखूँगा?

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

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

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

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

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

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

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

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

  1. MultiIndex बनाना
  2. MultiIndex से डेटा चुनना
  3. इंडेक्स संरेखण और रीइंडेक्सिंग
  4. क्रमबद्ध इंडेक्स के प्रदर्शन लाभ
← Pandas & NumPy Academy पर वापस जाएँ