2016-11-02 8 views
0

Ich habe einen Datenrahmen wie folgt:Pandas boolean Betrieb

ref check  result 
1  age   true 
1  gender  false 
1  address  false 
1  nationality true 

Ich versuche, eine neue Spalte von 1 und 0 zu erstellen, wenn die folgende Bedingung erfüllt ist.

if age == 'true' & (gender == 'false' or address == 'false') & nationality == 'true', then 1 else 0. 

Dies ist der Code, dass ich

df['test']= ((df['check']=='age' & df['result']=='true') & ((df['check']=='gender'/df['check']=='address') & df['result']=='false') & (df['check']=='nationality' & df['result']=='true')).astype('int') 

haben, aber es funktioniert nicht.

+0

Python hat keinen '&' booleschen Operator. Sie müssen das Wort 'and' verwenden. –

+2

@EliSadoff Es tut. Bitwise und –

+0

@MosesKoledoye Ich korrigierte meinen Kommentar zu Boolean '&' die Sekunde, bevor Sie das gepostet haben. Schöner Fang! –

Antwort

2

Was Sie anstelle der / suchen, ist |. Aber ich würde generell nicht raten, bitweise Operatoren für Bedingungen zu verwenden. Sie funktionieren, wenn die Operanden True und False auswerten, würden aber falsche Ergebnisse liefern, wenn die Bedingungen in Bytes sind oder Sie einen Kurzschluss benötigen.

Auf einer anderen Anmerkung der Vorrang des & und | ist höher als die von == so dass die Expression nicht tun, was man eigentlich erwarten zB:

df['check']=='age' & df['result']=='true' 

ausgewertet als:

df['check']== ('age' & df['result']) =='true' 

Sie können die Operatoren in Klammern einschließen, um die Reihenfolge der Auswertung zu ändern:

(df['check']== 'age') & (df['result']) =='true') 

aktualisieren @kennytm

Sie nicht and oder or in diesem Fall müssen nur in geeigneter Weise die Pars verwenden.

+0

Oh danke, ich wusste nichts davon Ich bleibe bei und und oder. – Kvothe

+0

Ich bin mir ziemlich sicher, dass du * und 'hier nicht verwenden kannst, da' & ',' | ',' ~ 'haben spezielle Bedeutungen in Pandas (numpy). http://stackoverflow.com/questions/21415661/logic-operator-for-boole-in-indexing-in-pandas – kennytm

+0

@kennytm Ich habe tatsächlich diese numpy Funktion vergessen Danke für den Zeiger –

Verwandte Themen