2017-07-15 3 views
1

背景を使用したデータフレームに新しい文字列列を作成するために使用する機能:私は、既存の一連の列の値に基づいて新しい文字列列を作成しようとしています:私はPythonのデータフレームパイソン:複数のElif文に

目標を持っています。これには複数の 'elif'文が必要です。以下は

アウトerroringれる私(サンプル)コードです:

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) 

これは私が 'elifの' 文で取得エラーです:

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

すべてのヘルプは大歓迎です!

+0

あなたは 'if'ブロックに' result'を作成します - これは 'elif'ブロックのどこから来たはずですか? – jonrsharpe

+0

あなたは私がすべてのelifブロックから戻り値を取り除くべきであると言っていますか? – PineNuts0

+0

私は確信していませんが、私はあなたが何が起こることを期待しているのか正確にはわかりません。あなたが '行' ['Recommendation No.1']!= 'Category_A''から 'result'が来ると期待している場所はどこですか? – jonrsharpe

答えて

0

問題はあなただけ最初ifブロック内resultを定義することですので、elif文を実行すると、彼らはエラーが変数resultを代入する前に参照されているという理由でresultという名前の変数へのアクセスを持っていません(割り当てはこの行にあります:result = [])。条件線の前にresult = []行を入力するか、ブロックifelifブロックにすべて含めるかのどちらかです。

関連する問題