2014-09-19 8 views
7

के आधार पर मैं निम्नलिखित DataFrame है:पांडा देखने मूल्य

Date best value 
1990 a  5 
1991 c  2 
1992 d  12 
1993 a  5 

तो मैं एक और पंक्ति के आधार पर एक मूल्य खोजने के लिए देख रहा हूँ:

Date best a b c d 
1990 a  5 4 7 2 
1991 c  10 1 2 0 
1992 d  2 1 4 12 
1993 a  5 8 11 6 

मैं चाहूँगा एक dataframe इस प्रकार बनाने के लिए कॉलम नामों का उपयोग करके मूल्य। उदाहरण के लिए, दूसरे डीएफ में 1 99 0 के लिए मूल्य को पहले डीएफ से "ए" देखना चाहिए और दूसरी पंक्ति को पहले डीएफ से "सी" (= 2) देखना चाहिए।

कोई विचार?

उत्तर

4

तुम एक देखने समारोह बनाते हैं और अपने dataframe पंक्ति-वार पर apply फोन, इस बड़े DFS हालांकि

In [245]: 

def lookup(x): 
    return x[x.best] 
df['value'] = df.apply(lambda row: lookup(row), axis=1) 
df 
Out[245]: 
    Date best a b c d value 
0 1990 a 5 4 7 2  5 
1 1991 c 10 1 2 0  2 
2 1992 d 2 1 4 12  12 
3 1993 a 5 8 11 6  5 
+0

कोई भी मौका आप यह बता सकते हैं कि कोड का यह बिट कैसे काम करता है? – 3kstc

+0

@ 3kstc मूल रूप से हम 'अक्ष' को 'अक्ष' = 1' से गुजरकर पंक्तियों पर पुनरावृत्ति के लिए उपयोग करते हैं, इसलिए लैम्बडा यहां पंक्ति है इसलिए पहली पंक्ति 'x' पहली पंक्ति है, फिर हम एक विशिष्ट कॉलम लौटाते हैं जिसमें हम यह मामला उस पंक्ति को इंगित करने के लिए 'सर्वश्रेष्ठ' का मूल्य होगा – EdChum

4

वहाँ एक lookup समारोह में बनाया गया है कि स्थिति के इस प्रकार संभाल कर सकते हैं के लिए बहुत कुशल नहीं है (पंक्ति/कॉलम द्वारा दिखता है)। मुझे नहीं पता कि यह कितना अनुकूलित है, लेकिन लागू समाधान से तेज़ हो सकता है।

In [9]: df['value'] = df.lookup(df.index, df['best']) 

In [10]: df 
Out[10]: 
    Date best a b c d value 
0 1990 a 5 4 7 2  5 
1 1991 c 10 1 2 0  2 
2 1992 d 2 1 4 12  12 
3 1993 a 5 8 11 6  5 
+1

खिलौना डेटासेट पर लागू होने पर 470us लगते हैं, लुकअप 531us – EdChum

+1

हम्म लेता है कुछ कारणों से समय-समय पर स्मृति त्रुटि हो जाती है जब मैं इसे 4000 पंक्तियों के एक मामूली आकार के डीएफ पर भी कोशिश करता हूं , 400 पंक्तियों के लिए मुझे 8.17 एमएमएस का उपयोग करके आवेदन और 3.05 एमएमएस का उपयोग करके मिलता है, इसलिए मुझे उम्मीद है कि लुकअप बेहतर स्केल करने के लिए – EdChum

+0

सरल सिंटैक्स के कारण लुकअप को प्राथमिकता दी जा सकती है लेकिन दोनों पूरी तरह से काम करते हैं, थक्स दोस्तों! – AtotheSiv

संबंधित मुद्दे