2012-11-28 7 views
8

मैं पांडस के लिए बहुत नया हूं (यानी, 2 दिनों से कम)। हालांकि, मुझे दो कॉलम को किसी अन्य स्थिति के साथ संयोजन के लिए सही वाक्यविन्यास का पता लगाना प्रतीत नहीं होता है।पाइथन पांडा में if/else के साथ दो स्तंभों को कैसे जोड़ना है?

असल में, मैंने 'ज़िप' का उपयोग करके इसे करने का एक तरीका पता लगाया। यही वह है जो मैं पूरा करना चाहता हूं, लेकिन ऐसा लगता है कि पांडा में ऐसा करने का एक और अधिक प्रभावी तरीका हो सकता है।

पूर्णता के लिए, मैं कुछ पूर्व प्रसंस्करण मैं चीजों को स्पष्ट बनाने के लिए कर में शामिल हैं:

records_data = pd.read_csv(open('records.csv')) 

## pull out a year from column using a regex 
source_years = records_data['source'].map(extract_year_from_source) 

## this is what I want to do more efficiently (if its possible) 
records_data['year'] = [s if s else y for (s,y) in zip(source_years, records_data['year'])] 
+0

मैं आश्चर्य है कि क्या आप 'record_data [' year '] = record_data [' source '] लिख सकते हैं यदि record_data [' source '] else record_data [' year '] '। – minopret

+0

नहीं! -------------------------------------------------- ------------------------- वैल्यूएरर ट्रेसबैक (सबसे हालिया कॉल अंतिम) () में - ---> 1 एक्स = record_data ['स्रोत'] अगर record_data ['स्रोत'] अन्यथा record_data ['year'] वैल्यूएरर: एक से अधिक तत्व वाले सरणी का सत्य मान संदिग्ध है। A.any() या a.all() – pocketfullofcheese

+0

का उपयोग करें, मैं देख रहा हूं [डेटा सेट ओवरलैपिंग का संयोजन] (http://pandas.pydata.org/pandas-docs/stable/basics.html#combining-overlapping-data -sets)। हो सकता है कि आप इसे जितना तेज़ कर सकें उतना तेज़ कर सकें। मैं केवल आपके प्रश्न से चिंतित था। मुझे पांडस से कोई परिचितता नहीं है। – minopret

उत्तर

11

पांडा में

df['year'] = df['year'].where(source_years!=0,df['year']) 

और देखें:

http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-where-method-and-masking

टिप्पणी में बताया गया है, इस हुड के नीचे np.where का उपयोग करता है - अंतर यह है कि पांडा उत्पादन के साथ श्रृंखला संरेखित करता है (तो उदाहरण के लिए आप केवल एक आंशिक अद्यतन कर सकते हैं)

8

शायद np.where कोशिश:> = 0.10.0 कोशिश

import numpy as np 
df['year'] = np.where(source_years,source_years,df['year']) 
+0

धन्यवाद। अभी तक यह एक कोशिश करने का मौका नहीं मिला है ... – pocketfullofcheese

+0

यह बहुत अच्छा है! पांडा के विपरीत '। कहीं भी' यह मुझे केवल एक स्केलर निर्दिष्ट करने की अनुमति देता है और यह श्रृंखला में भरने का गंदे काम करेगा। एक उत्तीर्ण उदाहरण: 'डीएफ ['सी'] = एनपी। कहीं (df.a> df.b, 1, -1)' – fantabolous