मैं अपने डेटाफ्रेम के भीतर एक नया कॉलम बनाने के लिए लैम्ब्डा और मैप का उपयोग करने की कोशिश कर रहा हूं। अनिवार्य रूप से नया कॉलम कॉलम ए लेगा यदि कोई मानदंड पूरा हो गया है और कॉलम बी मानदंड पूरा नहीं हुआ है। कृपया नीचे मेरा कोड देखें।

df['LS'] = df.['Long'].map(lambda y:df.Currency if y>0 else df.StartDate)

हालांकि, जब मैं ऐसा करता हूं तो फ़ंक्शन मेरे नए कॉलम में प्रत्येक आइटम पर संपूर्ण कॉलम लौटाता है।

अंग्रेजी में मैं कॉलम लॉन्ग में प्रत्येक आइटम y का अध्ययन कर रहा हूं। यदि आइटम> 0 है तो कॉलम "मुद्रा" में yth मान लें। अन्यथा "प्रारंभ" कॉलम में yth मान लें।

उपरोक्त को चलाने में पुनरावृत्ति अत्यंत धीमी है। क्या कोई अन्य विकल्प भी हैं?

धन्यवाद! जेम्स

3
user7437214 31 जिंदा 2017, 19:30
df.[…] एक सिंटैक्स त्रुटि है। क्या आप सुनिश्चित हैं कि यह वही कोड है जिसे आप चला रहे हैं?
 – 
mkrieger1
31 जिंदा 2017, 19:33
1
IIUC आप चाहते हैं df['LS'] = df['Currency'].where(df['Long']>0,df['StartDate'])
 – 
EdChum
31 जिंदा 2017, 19:36

2 जवाब

बस करना

df['LS']=np.where(df.Long>0,df.Currency,df.StartDate)

जो अच्छा वेक्टरेड दृष्टिकोण है।

df.Long.map प्रत्येक पंक्ति पर लागू होते हैं, लेकिन वास्तव में df.State या df.current लौटते हैं जो श्रृंखला हैं।

एक अन्य दृष्टिकोण पर विचार करना है:

df.apply(lambda row : row[1] if row[0]>0 else row[2],1)

df.columns=Index(['Long', 'Currency', 'StartDate', ...]) के साथ भी काम करेगा

लेकिन यह एक सदिश दृष्टिकोण नहीं है, इसलिए यह धीमा है। (इस मामले में 1000 पंक्तियों के लिए 200x धीमा)।

1
B. M. 31 जिंदा 2017, 20:12

आप का उपयोग करके ऐसा कर सकते हैं। where:

df['LS'] = df['Currency'].where(df['Long']>0,df['StartDate'])
0
EdChum 31 जिंदा 2017, 19:46