2017-09-30 5 views
1

データフレームに新しい列を作成したい場合は、「結果」としましょう。私は、「結果」の各値を2つの他の列の値に基づいて決定したいと考えています。それでは、これが私のデータフレームであるとしましょう:Python - 他の列の値を考慮して新しい列の値を作成する新しい列を追加する

:だから私は種類のこのようなロジックを取り込んで新しい列を作成したい

subject_id first_name last_name 
0   1  Alex Anderson 
1   2  Amy Ackerman 
2   3  Allen  Ali 
3   4  Alice  Aoni 
4   5  Ayoung Atiches 

raw_data = { 
     'subject_id': ['1', '2', '3', '4', '5'], 
     'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 
     'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']} 
df_a = pd.DataFrame(raw_data, columns = ['subject_id', 'first_name', 'last_name']) 

これは、データフレームがどのように見えるか出ています

if(df_a[df_a['subject_id'] == 2] & df_a[df_a['first_name'] == 'Amy']): 
    df_a['outcome'] = 2 
elif(df_a[df_a['subject_id'] > 0] & df_a[df_a['first_name'] == 'Alice']): 
    df_a['outcome'] = 1 
else: 
    df_a['outcome'] = 0 

私はそれが正しく動作するように見えることはできません。

subject_id first_name last_name outcome 
0   1  Alex Anderson 0 
1   2  Amy Ackerman 2 
2   3  Allen  Ali 0 
3   4  Alice  Aoni 1 
4   5  Ayoung Atiches 0 
+0

'np.where'を使用しますか?または、 'np.select'です。 –

+0

@cᴏʟᴅsmultipleどのように複数の条件でnp.whereを使用しますか? –

+0

私はあなたを見せます.. –

答えて

2

使用numpy.selectまたはnumpy.where

#first convert `subject_id` to int 
df_a['subject_id'] = df_a['subject_id'].astype(int) 
m1 = (df_a['subject_id'] == 2) & (df_a['first_name'] == 'Amy') 
m2 = (df_a['subject_id'] > 0) & (df_a['first_name'] == 'Alice') 

df_a['outcome'] = np.select([m1, m2], [2,1], default=0) 
print (df_a) 
    subject_id first_name last_name outcome 
0   1  Alex Anderson  0 
1   2  Amy Ackerman  2 
2   3  Allen  Ali  0 
3   4  Alice  Aoni  1 
4   5  Ayoung Atiches  0 

または:

df_a['outcome'] = np.where(m1, 2, np.where(m2, 1, 0)) 
print (df_a) 
    subject_id first_name last_name outcome 
0   1  Alex Anderson  0 
1   2  Amy Ackerman  2 
2   3  Allen  Ali  0 
3   4  Alice  Aoni  1 
4   5  Ayoung Atiches  0 
+0

' subject_id'は文字列です...あなたはintを比較しています。あなたはエラーが発生します。私はあなたのコードを実行していないと思いますか? –

+0

はい、私はそれを行います。それだけを忘れてしまった。 – jezrael

0
df_a.loc[(df_a['subject_id'] == 2) & (df_a['first_name'] == 'Amy'),'outcome']=2 
df_a.loc[(df_a['subject_id'] > 0) & (df_a['first_name'] == 'Alice'),'outcome']=1 
df_a['outcome'].fillna(0) 
上記と同様に良好

ないが、見ている私はこのように見て新しい列を期待しますあなたがしようとしていたところで、これはあなたにとって重要です。

関連する問題