एक्सेल टू पाइथन: पांडा डेटाफ्रेम और इंडेक्स का उपयोग करके कुशलता से मूल्यों को कैसे देखें

Unsplash पर Mika Baumeister द्वारा फोटो

विश्लेषकों को अक्सर गणना करने के लिए तालिकाओं में मूल्यों को देखने की आवश्यकता होती है। एकल मानदंड लुक-अप एक्सेल में vlookup, hlookup या इंडेक्स / मैच के साथ करना अपेक्षाकृत आसान है। लेकिन कार्यान्वयन तब मुश्किल होने लगता है जब लुकअप टेबल में कई मापदंड होते हैं, और विश्लेषकों को संप्रदायों, ऑफ़सेट्स और गस्टली ctrl-enter सरणी फ़ंक्शंस के दलदल में उतरने के लिए मजबूर किया जाता है।

डर नहीं! इस लेख में मैं आपको दिखाऊंगा कि पंडों के डेटाफ़्रेम और इंडेक्स का उपयोग करके अजगर में ऐसा करना कितना तुच्छ है। थोड़े समय के निवेश के साथ आप जल्द ही उन लुकअप को बहुत तेजी से और कम मानसिक ऊर्जा के साथ कर रहे होंगे।

आइए हम विगेट्स के लिए एक आयात व्यवसाय शुरू करने पर विचार कर रहे हैं। मुझे विश्वास है कि ये विजेट $ 100 प्रत्येक के लिए बेचेंगे। एक स्थायी व्यवसाय के लिए लागतों को ध्यान में रखना आवश्यक है, इसलिए मेरा अगला कार्य विजेट्स को आयात करने के लिए एक लागत प्रभावी स्थान चुनना है।

मैंने 5 साल की ऐतिहासिक विनिमय दरों को एक साथ खींचा है, जिसका उपयोग मैं विजेट मूल्य डेटा के साथ करूँगा ताकि मुझे USD में मेरी भावी लागत प्रति विजेट और मेरे सकल लाभ प्रति यूनिट का अनुमान लगाने में मदद मिल सके।

इस गणना में एक कदम नीचे दी गई तालिका का उपयोग करके प्रत्येक वर्ष के लिए विनिमय दर देखना है:

मेरा गणना सेटअप इस तरह दिखता है:

लुकअप हमेशा एक्सेल में लागू करना आसान नहीं होता है, और बहुत सारे अलग-अलग दृष्टिकोण होते हैं। विनिमय दर तालिका में देश और वर्ष के मानदंड दोनों लंबवत और क्षैतिज रूप से फैले हुए हैं, इसलिए मैं प्रत्येक गणना के लिए सही डेटापॉइंट को हथियाने के लिए vlookup और hlookup के संयोजन का उपयोग करता हूं:

= VLOOKUP (I5, $ B $ 5: $ जी $ 11, HLOOKUP ($ जे $ 2, $ सी $ 3: $ जी $ 4,2, FALSE), FALSE)

यदि मानदंड नीचे की तरह दोनों लंबवत बढ़ाए गए हैं, तो सरणी के बजाय एक सरणी-आधारित SUMPRODUCT फ़ंक्शन का उपयोग किया जाता है।

{= SUMPRODUCT ((G5 = $ B $ 3: $ B $ 37) * ($ एच $ 2 = $ सी $ 3: $ सी $ 37) * ($ डी $ 3: $ डी $ 37))}

मुझे यकीन है कि आपका अनुभव मेरे जैसा है: इन कार्यों को लागू करने में समय लगता है और यह थका देने वाला और निराशाजनक हो सकता है।

इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए…

अजगर के बारे में क्या?

आइए 2019 के लिए हमारे सकल लाभ की गणना करके शुरू करें:

मैंने विनिमय दर डेटा को पंडों के डेटाफ़्रेम में आयात किया है और यह मुद्रा शोर्ट [EUR, CZK, ..] के साथ निम्नानुसार दिखता है:

पहला कदम उस देश की मुद्रा कोड के आधार पर प्रत्येक देश के लिए विनिमय दर की खोज करना है। यह वह जगह है जहां हमारी विनिमय दर तालिका में सूचकांक काम आता है। .Loc का उपयोग करके सूचकांक मान का उपयोग करके पंक्ति का चयन करना आसान है:

xr_df.loc [ "यूरो"]

आइए, gr_calc_2019 से "मुद्रा" कॉलम का उपयोग करके 2019 में xr_df से विनिमय दरों की एक सरणी हड़पने के लिए इसे आगे बढ़ाएँ:

xr_df.loc [gp_calc_2019.currency, "2019"]

मिठाई। हम इन मूल्यों को सीधे अपने मौजूदा एक्सचेंज_रेट कॉलम में क्यों नहीं डालते हैं? (सही प्रारूप बनाने के लिए .values ​​का उपयोग करते हुए):

gp_calc_2019 ["exchange_rate"] = xr_df.loc [gp_calc_2019.currency, "2019"]। मान।

आप की तरह आसान। शेष कॉलमों को भरने के बाद हम समाप्त होते हैं:

इस पहले उदाहरण में हमने देखा कि लुकअप टेबल में किसी एकल मान को कैसे देखा जाए। लेकिन कई मानदंडों के साथ लुकअप के बारे में क्या? चलो एक नज़र डालते हैं…

पहला कदम हमारी विनिमय दर तालिका को एक ऊर्ध्वाधर प्रारूप में पिवट करना है ताकि इसे आसान बनाया जा सके। यहाँ मूल तालिका है:

व्यावहारिक कारणों से हम एक सूची के रूप में कॉलम के नामों को "वर्ष" नामक एक नए चर में सहेज कर शुरू करते हैं (आप देखेंगे कि एक सेकंड में क्यों)।

सूचकांक को रीसेट करें ...

xr_yr_df = xr_df.reset_index ()

... और तालिका को स्थानांतरित करने के लिए .melt फ़ंक्शन का उपयोग करें। हम पांडा को सूचकांक के रूप में "सूचकांक" नाम के कॉलम का उपयोग करने के लिए कहते हैं, और फिर अन्य कॉलम (हमारे "वर्षों" चर में सहेजे गए) को एक कॉलम में "पिघला" करते हैं।

xr_yr_df = xr_yr_df.melt (id_vars = "index", value_vars = ")

हम कॉलम का नाम भी बदलते हैं (inplace = True मौजूदा तालिका को बदल देगा, एक नई प्रतिलिपि बनाने के बजाय)

xr_yr_df.rename (कॉलम = {"इंडेक्स": "मुद्रा", "वेरिएबल": "वर्ष", "मूल्य": "रेट"}, inplace = True)

फिर हम अपनी विनिमय दर तालिका के लिए एक नया सूचकांक बनाते हैं, लेकिन इस बार केवल एक के बजाय 2 सूचकांक का उपयोग करते हैं:

 xr_yr_df.set_index (["मुद्रा", "वर्ष"], inplace = True)

महान! यहां हमारी गणना तालिका है जिसमें हम विनिमय दरों को खींचना चाहते हैं। मान लें कि हम केवल 3 वर्षों के ऐतिहासिक डेटा में रुचि रखते हैं:

हम ठीक उसी पद्धति का उपयोग करने जा रहे हैं जैसा हमने सिंगल लुकअप टेबल के लिए किया था: हमारी लुकअप टेबल के माध्यम से एक इंडेक्स ऐरे को चलाएं जो सही विनिमय दरों को खींचता है, इस समय को छोड़कर इंडेक्स एरे में मुद्रा और वर्ष दोनों होते हैं।

हमारी गणना तालिका gp_calc में मुद्रा और वर्ष कॉलम का उपयोग करते हुए, हम फ्लाई पर एक इंडेक्स बनाते हैं, जिसे हम लुकअप_मुल्टीइंडेक्स नामक एक नए वेरिएबल में सेव करते हैं:

लुकिंग_मूलिंडेक्स = gp_calc.set_index (["मुद्रा", "वर्ष"]) सूचकांक।

अब हम प्रत्येक देश और वर्ष की विनिमय दरों को हथियाने के लिए इस चर को अनुक्रमित विनिमय दर तालिका के माध्यम से चलाते हैं। फॉर्मूला बिल्कुल वैसा ही है जैसा कि पहले हमने किया था। आइए उन मूल्यों को हमारी मूल तालिका में सहेजें:

gp_calc ["exchange_rate"] = xr_yr_df.loc [लुकअप_मूल्टइंडेक्स] .values।

अब हम प्रति विजेट और सकल लाभ में usd की लागत की गणना कर सकते हैं, परिणाम के साथ हमें छोड़कर:

उम्मीद है कि आप साथ-साथ चलने का प्रबंधन करेंगे और पंडों में एकल और बहु-मानदंड दोनों को पूरा करने के तरीके को समझेंगे। यदि इसमें से कुछ समझ में नहीं आया है, तो यह ठीक भी है। हमारे द्वारा चर्चा की गई विधियों के लिए वास्तव में अपने हाथों को गंदा करने जैसा कुछ भी नहीं है।

यदि आपके कोई प्रश्न या टिप्पणी है, तो कृपया मुझे टिप्पणियों या एक दोपहर में बताएं। क्या एक्सेल / पायथन में कोई अवधारणा है जिसे आपको लगता है कि कवर करने की आवश्यकता है? मुझे पता है और शायद मैं इस पर एक साथ कुछ डाल देंगे :-)