2017-07-15 5 views
1

Hintergrund: Ich habe eine Python DatenrahmenPython: Verwenden Sie Funktion zum Erstellen neuer String-Spalte in Datenrahmen Verwenden mehrerer Elif Statements

Ziel: Ich versuche, eine neue String-Spalte auf Werte in einer Reihe von bestehenden Säulen basiert. Dies erfordert mehrere Elif-Anweisungen.

Unten ist mein (Probe) Code, wird erroring aus:

def rationale(row): 
    if row['Recommendation No. 1'] == 'Category_A': 
     result = [] 
     result.append(row['First_Flag']) 
     result.append(row['Second_Flag']) 
     result.append(row['Third_Flag']) 
     result = ' '.join(result) 
     return result 
    elif row['Recommendation No. 1'] == 'Category_B': 
     result.append(row['Fourth_Flag']) 
     result.append(row['Fifth_Flag']) 
     result.append(row['Sixth_Flag']) 
     result.append(row['Seventh_Flag']) 
     result = ' '.join(result) 
     return result 
    elif row['Recommendation No. 1'] == 'Category_C': 
     result.append(row['Eigth_Flag']) 
     result.append(row['Ninth_Flag']) 
     result.append(row['Tenth_Flag']) 
     result.append(row['Eleventh_Flag']) 
     result = ' '.join(result) 
     return result 
    else: 
     return np.nan 

df_top3_rationale['Recommendation No. 1 Rationale'] = df_top3_rationale.apply(rationale, axis=1) 

Dies ist der Fehler, den ich auf den 'elif' Aussagen erhalten:

UnboundLocalError: ("local variable 'result' referenced before assignment", 'occurred at index 14854') 

Jede Hilfe wird sehr geschätzt!

+0

Sie erzeugen nur 'result' im' if' Block - woher soll es in den 'elif' Blöcken kommen? – jonrsharpe

+0

sagst du, ich sollte das Rückgabeergebnis von allen elif-Blöcken entfernen (und es im if-Block belassen)? – PineNuts0

+0

Ich bin mir nicht sicher, ich weiß nicht genau, was Sie erwarten, ich ermutige Sie nur darüber nachzudenken, wie das funktionieren könnte. Wo * erwarten * Sie, dass 'Ergebnis' von 'if Zeile [' Empfehlung Nr. 1 ']! =' Kategorie_A 'kommt? – jonrsharpe

Antwort

0

Das Problem ist, dass Sie result nur innerhalb des ersten if Block definieren, so dass, wenn die elif Anweisungen ausführen, sie haben keinen Zugriff auf eine Variable result genannt, weshalb der Fehler sagt, dass die Variable result vor der Zuweisung referenziert (Zuweisung ist in dieser Zeile: result = []). Was Sie tun sollten, ist entweder die Zeile result = [] vor den Bedingungen, oder fügen Sie es in jedem if und elif Block.

Verwandte Themen