2016-10-02 44 views
5

mam pandy dataframe 'DF' z dwóch kolumnach 'A' i 'B', mam funkcję z dwoma argumentamipandy, stosuje się z argumentami, które są dataframe wpisy row

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

i chciałbym aby go zastosować rząd po rzędzie df pomocą „Zastosuj” funkcję

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

ale pojawia się błąd

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

co dzieje tutaj , wydaje się, że trwa to df ['A'] jako cała seria! nie tylko wpis wiersza z tej serii, jeśli jest to wymagane.

Odpowiedz

9

myślę, że trzeba:

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 

Lub:

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

Dlaczego nie mogę użyć argumentu 'args' dla funkcji zastosowanie? –

+0

sprawdź [to] (http://stackoverflow.com/a/12183507/2901002). – jezrael

+0

@RunnerBean można przekazywać argumenty w porządku. 'apply' akceptuje' kwargs', dzięki czemu możesz przekazywać takie argumenty: 'df ['B']. apply (myfunction, A = df ['A'])" Ale w tym przypadku jest to zły pomysł, jak byś był przekazywanie całej serii do funkcji zastosowanej w każdym wierszu. – piRSquared