2014-07-16 6 views
5

में दो चर (कॉलम) पर सशर्त है जो लैम्ब्डा फ़ंक्शन कैसे लिखें, मेरे पास डेटा चर, डीएफ, दो चर, एक्स और वाई के साथ है। मैं एक समारोह है कि निम्नलिखित करता लिखना चाहते हैं:पाइथन

एक्स अगर एक्स> 100 और y < 50 किसी और y

मैं STATA में डेटा विश्लेषण कर रही करने के लिए इस्तेमाल कर रहा हूँ तो मैं अपेक्षाकृत करने के लिए नया हूँ डेटा विश्लेषण के लिए पांडा। यदि यह मदद करता है, STATA में यह दिखाई देगा:

की जगह एक्स = cond (एक्स> 100 & y < 50, एक्स, वाई)

दूसरे शब्दों में, समारोह दो पर सशर्त है डीएफ में कॉलम और स्थिति को पूरा करने के आधार पर प्रत्येक पंक्ति में एक चर या दूसरे से एक मूल्य वापस कर देगा।

अब तक मैं जैसे नए कार्यों के माध्यम से नए चर बनाने की है:

df.dummyVar = df.x.apply (लैम्ब्डा एक्स: 1 अगर एक्स> बाकी 100 0)

स्टैक ओवरफ्लो और प्रलेखन का उपयोग करके मैं केवल एक ही चर पर निर्भर एक फ़ंक्शन को एक से अधिक कॉलम (अक्ष विकल्प का उपयोग करके) पर लागू करने में सक्षम हूं। कृपया मदद करे।

उत्तर

11

उपयोग where:

df['dummyVar '] = df['x'].where((df['x'] > 100) & (df['y'] < 50), df['y']) 

यह बहुत तेजी से हो जाएगा की तुलना में प्रदर्शन कर एक ऑपरेशन लागू के रूप में यह है vectorised।

+0

यह वही है जो मुझे चाहिए था। और यह बहुत अच्छा है क्योंकि मैं पहले से ही देख सकता हूं कि मैं इसे 3 या अधिक चरों पर सशर्त क्षेत्रों में कैसे विस्तारित कर सकता हूं। धन्यवाद! – seeiespi

+0

@seeppi आपका स्वागत है, आप इसे उत्तर के रूप में स्वीकार कर सकते हैं, मतदान बटन के नीचे एक टिक चिह्न होगा। आवेदन और पुनरावृत्ति का उपयोग करना हमेशा अंतिम विकल्प होना चाहिए, यदि संभव हो तो संपूर्ण डेटाफ्रेम पर चलने वाली विधि पाएं – EdChum

5

इस तरह:

f = lambda x, y: x if x>100 and y<50 else y 

लैम्ब्डा (रों) पायथन में एक सामान्य समारोह परिभाषा के बराबर हैं।

def f(x, y): 
    return x if x>100 and y<50 else y 

एनबी: एक लैम्ब्डा के शरीर एक वैध अभिव्यक्ति होना चाहिए। इसका मतलब है कि आप उदाहरण के लिए return जैसी चीजों का उपयोग नहीं कर सकते हैं; एक लैम्ब्डा मूल्यांकन की अंतिम अभिव्यक्ति वापस कर देगा।

कुछ अच्छा पढ़ने देखें:

+0

मैंने वास्तव में इस तरह एक समारोह लिखा था लेकिन लागू करने में असमर्थ था ताकि यह प्रत्येक पंक्ति के माध्यम से लूप के बिना दौड़ सके। EdChum द्वारा प्रदान किया गया जवाब वास्तव में करता है। यदि आप इस परिभाषित फ़ंक्शन का उपयोग करके इसे पूरा करने के तरीके के बारे में जानते हैं तो मुझे यकीन है कि मैं भविष्य में इसका उपयोग कर सकता हूं। आपके इनपुट के लिए धन्यवाद :) – seeiespi

+0

@seeiespi आपने मूल रूप से "लैम्बडा फ़ंक्शन कैसे बनाया है जो दो तर्क लेता है?" - यह कैसे है :) - एडचम ने आपको एक उत्तर प्रदान किया है जो आपके इरादे से हैं और आपके डेटासेट (पैंडस) के साथ हैं। –