2016-12-09 2 views
1

Ich habe einen Pandas Datenrahmen dfHinzufügen von Spaltendatenrahmen Pandas in Vectorized Weise Anlage auf andere Spaltenwerte

>>> df 
      a b c 
0   1 1 0    
1   1 -1 1      
2   1 0 0 

Jetzt habe ich eine neue Spalte df hinzufügen möchten [ ‚e‘] Anlage auf Spalte a und b. Ich möchte die neue Spalte vektorisiert erstellen.

Vorerst bin ich wie folgt vorgehen:

df["e"] = [-1 if (df['a'] == 1 and df['b'] == 1) else 1] 

dem Ausgang sollte:

>>> df 
       a b c e 
    0   1 1 0 -1   
    1   1 -1 1 1     
    2   1 0 0 1 

Aber ich erhalte den folgenden Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/hmishfaq/anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 917, in __nonzero__ 
    .format(self.__class__.__name__)) 
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Was bin ich falsch machen und was ist die richtige Art der Vektorisierung hier?

PS: Der ursprüngliche Dataframe, den ich verwenden muss, ist wirklich groß und For-Loop braucht dafür immer eine Ewigkeit.

Antwort

3

Sie können sehr schnell verwenden numpy.where:

df['e'] = np.where((df['a'] == 1) & (df['b'] == 1), -1, 1) 
print (df) 
    a b c e 
0 1 1 0 -1 
1 1 -1 1 1 
2 1 0 0 1 
Verwandte Themen