Python—添加考虑其他列值的新列,以创建新列的值

Python—添加考虑其他列值的新列,以创建新列的值,python,pandas,dataframe,Python,Pandas,Dataframe,所以我想在我的数据框架中创建一个新列,我们称之为“结果”。我希望“结果”中的每个值都根据其他两列中的值来确定。假设这是我的数据帧: raw_data = { 'subject_id': ['1', '2', '3', '4', '5'], 'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'last_name': ['Anderson', 'Ackerman', 'Ali', '

所以我想在我的数据框架中创建一个新列,我们称之为“结果”。我希望“结果”中的每个值都根据其他两列中的值来确定。假设这是我的数据帧:

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'])
这就是out dataframe的外观:

  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
所以我想创建一个新的列,它采用如下逻辑:

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
但我似乎无法让它正常工作。我希望新专栏的内容如下:

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
使用或:

或:


虽然没有上面提到的那么好,但是看看你想做什么,这对你来说很重要。

使用
np.where
?或者,
np。选择
@cᴏʟᴅsᴘᴇᴇᴅ 如何在多个条件下使用np.where?我将向您展示..
c1=(df_a['subject\u id']='2')&(df_a['first\u name']='Amy');c2=(df_a['subject_id']>'0')和(df_a['first_name']='Alice')
和,
np.where(c1,'2',np.where(c2,'1','0'))
subject_id
是一个字符串。。。你在比较整数。你会出错的。我猜你没有运行你的代码?是的,我运行了。只是忘了提过。
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)