2017-05-29 14 views
1

以下のスクリプトでは、DataFrameセルにNoまたはYesがある場合、値0または1を割り当てます。セル内に条件付き値を持つPandas DataFrameのループを作成

answer= {'account': ['Adam', 'Ben', 'Tom', 'Isabel'], 
    'a1': ['No', 'Yes', 'Yes', 'No'], 
    'a2': ['No', 'Yes', 'No', 'No'], 
    'a3': ['No', 'Yes', 'No', 'No'], 
    'a4': ['Yes', 'No', 'Yes', 'Yes']} 
RPI = pd.DataFrame.from_dict(answer) 

私はので、私は私が持っている50個の列を繰り返す必要はありません以下RPI.loc文のループや関数を作成しようとしています。それを行う方法はありますか?

RPI.loc[RPI['a1'] == 'No', 'a1'] = 0 
RPI.loc[RPI['a1'] == 'Yes', 'a1'] = 1 
RPI.loc[RPI['a2'] == 'No', 'a2'] = 0 
RPI.loc[RPI['a2'] == 'Yes', 'a2'] = 1 
RPI.loc[RPI['a3'] == 'No', 'a3'] = 0 
RPI.loc[RPI['a3'] == 'Yes', 'a3'] = 1 
RPI.loc[RPI['a4'] == 'No', 'a4'] = 0 
RPI.loc[RPI['a4'] == 'Yes', 'a4'] = 1 

    a1 a2 a3 a4 account 
0 0 0 0 1 Adam 
1 1 1 1 0 Ben 
2 1 0 0 1 Tom 
3 0 0 0 1 Isabel 

答えて

6

dictreplaceが必要:

RPI = RPI.replace({'No':0, 'Yes':1}) 
print (RPI) 
    a1 a2 a3 a4 account 
0 0 0 0 1 Adam 
1 1 1 1 0  Ben 
2 1 0 0 1  Tom 
3 0 0 0 1 Isabel 

位置によって置き換えるための列を指定する必要がある場合はilocを追加します。

print (RPI.iloc[:, 0:4]) 
    a1 a2 a3 a4 
0 No No No Yes 
1 Yes Yes Yes No 
2 Yes No No Yes 
3 No No No Yes 

RPI.iloc[:, 0:4] = RPI.iloc[:, 0:4].replace({'No':0, 'Yes':1}) 
print (RPI) 
    a1 a2 a3 a4 account 
0 0 0 0 1 Adam 
1 1 1 1 0  Ben 
2 1 0 0 1  Tom 
3 0 0 0 1 Isabel 
+0

ありがとうございました。これは私のために非常にうまくいった。私はとても感謝しています。 –

+0

うれしいことがあります。私の答えが役に立ったら、[受諾](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。ありがとう。 – jezrael

関連する問題