2016-10-02 12 views
5

मैं दो कॉलम 'ए' और 'बी' के साथ एक पांडा dataframe 'df' कर रहे हैं के साथ लागू होते हैं, मैं दो तर्कपांडा, आर्ग जो dataframe पंक्ति प्रविष्टियों

def myfunction(B, A): 
    # do something here to get the result 
    return result 

और मैं चाहते हैं के साथ एक समारोह है इसे लागू करने के लिए पंक्ति-दर-पंक्ति 'लागू करें' समारोह

df['C'] = df['B'].apply(myfunction, args=(df['A'],)) 

का उपयोग कर df के लिए, लेकिन क्या यहाँ हो रहा मैं त्रुटि

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

मिल , ऐसा लगता है कि यह पूरी श्रृंखला के रूप में डीएफ ['ए'] लेता है! आवश्यकतानुसार उस श्रृंखला से केवल पंक्ति प्रविष्टि नहीं।

उत्तर

9

मुझे लगता है कि आप की जरूरत:

import pandas as pd 
df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6]}) 

print (df) 
    A B 
0 1 4 
1 2 5 
2 3 6 

def myfunction(B, A): 
    #some staff 
    result = B + A 
    # do something here to get the result 
    return result 

df['C'] = df.apply(lambda x: myfunction(x.B, x.A), axis=1) 
print (df) 
    A B C 
0 1 4 5 
1 2 5 7 
2 3 6 9 

या:

def myfunction(x): 

    result = x.B + x.A 
    # do something here to get the result 
    return result 

df['C'] = df.apply(myfunction, axis=1) 
print (df) 
    A B C 
0 1 4 5 
1 2 5 7 
2 3 6 9 
+0

क्यों नहीं कर सकते मैं लागू समारोह के लिए 'आर्ग' तर्क का उपयोग करें? –

+0

जांचें [यह] (http://stackoverflow.com/a/12183507/2901002)। – jezrael

+0

@RunnerBean आप तर्क ठीक से पारित कर सकते हैं। 'लागू करें' स्वीकार करता है 'kwargs' ताकि आप इस तरह के तर्क पारित कर सकें: 'df [' B ']। लागू करें (myfunction, ए = डीएफ [' ए '])' लेकिन इस मामले में, यह एक बुरा विचार है जैसा आप होंगे प्रत्येक पंक्ति पर लागू एक समारोह में एक पूरी श्रृंखला गुजरती है। – piRSquared

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