2016-10-02 16 views
5

dataframe satır girişleri olan args ile uygulamak, iki argümanpandalar, iki sütun 'A' ve 'B' ile pandalar dataframe 'df' var

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

ve ben istiyorum bir işleve sahip uygulamak için 'uygulamak' fonksiyonunu

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

kullanarak df için by-satır-satır ama burada oluyor whats ben hatayı

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

olsun , tüm dizi olarak df ['A'] alır gibi görünüyor! Bu seriden sadece satır girişi gerekli değil.

cevap

9

Sana ihtiyacım var:

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 

Veya:

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

neden bunu ben uygulamak işlev için 'bağımsız değişken' argümanını kullanmak? –

+0

kontrol edin [this] (http://stackoverflow.com/a/12183507/2901002). – jezrael

+0

@RunnerBean argümanları sadece iyi geçebilirsiniz. 'Uygula' kwargs'ı kabul eder, böylelikle şu argümanları iletebilirsiniz: df ['B']. Uygula (işlev, A = df ['A']) 'Fakat bu durumda, Bütün bir diziyi her satırda uygulanan bir işleve geçirmek. – piRSquared

İlgili konular