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)