2017-06-10 12 views
0

Ich habe 4 Spalten in meinem Pandas Datenrahmen mit Spaltennamen können sagen, A, B, C, D jeweils auf ein Feld in UI zugeordnet. Jede hat ihren eigenen Zweck, aber Benutzer geben die Feld A-Information entweder in Feld A oder B oder C oder D ein. Ich versuche, die Daten zu bereinigen und zur Analyse in Spalte A zu bringen. Also, wenn es einen Wert in Spalte A gibt, interessiert mich nicht Werte in B oder C oder D. Aber wenn es keinen Wert in Spalte A gibt, dann muss ich nach Benutzereintrag in anderen Spalten suchen und es Spalte A bringen Die tatsächlichen Werte für Spalte A beginnen immer mit einigen Werten aus unserer Liste. Wenn also in Spalte A keine Daten vorhanden sind, müssen wir nach dem Wert in Spalte B suchen und sehen, ob dieser den Wert aus unserer Liste hat, und ihn dann zu A bringen, wenn Spalte B ebenfalls null ist oder wenn es einige hat anderen Wert als Werte aus unserer Liste, lassen Sie es und überprüfen Sie das gleiche in Spalte C, ähnlich wie in Spalte D. Wie geht das in Python?Python Pandas Spalte basierend auf mehreren wenn sonst Bedingungen

Bitte lassen Sie mich wissen, wenn etwas unklar ist.

Beispiel,

mylist = ['senior','junior','midlevel'] 

inputdf 

A  B  C   D 
senior male senior  UK 
     senior candidate USA 
     female junior  
junior male junior  AU 
     male candidate midlevel 
     female candidate AU 


Outputdf, 

A   B  C   D 
senior  male  senior  UK 
senior  senior candidate USA 
junior  female junior 
junior  male junior  AU 
midlevel male candidate midlevel 
      female candidate AU 

Antwort

0

können apply Funktion durch die df iterieren und den Wert in der Spalte ‚A‘ zurück.

def func(row): 
    for index_val, series_val in row.iteritems(): 
     if (series_val in mylist): 
      return series_val 

df['A'] = df.apply(func, axis = 1)

Dieser prüft Code, wenn der Wert in A ist in mylist vorhanden. Wenn ja, dann gibt diesen Wert zurück, sonst geht es weiter und überprüfe B und so weiter.

+0

Danke. In einigen Fällen sind die Mylist-Werte jedoch mehrfach vorhanden, z. B. kein Wert in Spalte A, aber Junior in Spalte B und Junior in Spalte C. In diesem Fall wird dies doppelt in Spalte A geschrieben. Wie können wir verhindern, dass es weiter überprüft wird Spalten, sobald es das erste Mal findet. –

+0

Sobald der Wert zurückgegeben wird, führt er keine doppelten Vergleiche durch. Sobald die return-Anweisung ausgeführt wird, bricht die Schleife ab und die Funktion führt keine weiteren Vergleiche durch. Wenn Sie weiterhin Probleme haben, können Sie weitere Beispiele hinzufügen (vor und nach dem Ausführen des Codes). –

+0

Danke. Got you, aber ich bekomme einen anderen Fehler - AttributeError: ("'Series" -Objekt hat kein Attribut' Spalten '.) Ich denke, Anwendung Funktion übergibt nur eine Spalte nach dem anderen auf die Funktion. –

Verwandte Themen