Python 从其他df列有条件地创建新列
我想在df1中创建一个新的布尔列,如果它在df2的两列中同时满足这两个条件。例如:Python 从其他df列有条件地创建新列,python,pandas,dataframe,if-statement,Python,Pandas,Dataframe,If Statement,我想在df1中创建一个新的布尔列,如果它在df2的两列中同时满足这两个条件。例如: df1: ID Date 01234 8-23-2020 01234 8-26-2020 01235 8-24-2020 01235 9-3-2020 01236 9-1-2020 df2: id visit 01234 8-23-2020 01235 9-3-2020 我只想在df1中实现df2中的访问,结果如下: df
df1:
ID Date
01234 8-23-2020
01234 8-26-2020
01235 8-24-2020
01235 9-3-2020
01236 9-1-2020
df2:
id visit
01234 8-23-2020
01235 9-3-2020
我只想在df1中实现df2中的访问,结果如下:
df1:
ID Date In_store
01234 8-23-2020 1
01234 8-26-2020 0
01235 8-24-2020 0
01235 9-3-2020 1
01236 9-1-2020 0
我试过:
pos_id = df2['id'].tolist()
pos_date = df2['visit'].tolist()
for row in df:
if df1['ID'].isin(pos_id) and df1['Date'].isin(pos_visit):
df1['In_store'] = 1
else:
df1['In_store'] = 0
for row in df:
if df1['ID'] == df2['ID'] and df1['Date'] == df2['Date']:
df1['In_store'] = 1
else:
df1['In_store'] = 0
但我得到:
ValueError:序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()
我试过:
pos_id = df2['id'].tolist()
pos_date = df2['visit'].tolist()
for row in df:
if df1['ID'].isin(pos_id) and df1['Date'].isin(pos_visit):
df1['In_store'] = 1
else:
df1['In_store'] = 0
for row in df:
if df1['ID'] == df2['ID'] and df1['Date'] == df2['Date']:
df1['In_store'] = 1
else:
df1['In_store'] = 0
但我得到:
“ValueError:即使将列重命名为相同的列,也只能比较标记相同的系列对象”
我错过了什么?
谢谢这基本上是合并:
merged = df1.merge(df2, left_on=['ID','Date'], right_on=['id','visit'], how='left')
df1['In_store'] = merged['visit'].notna().astype(int)
输出:
ID Date In_store
0 1234 8-23-2020 1
1 1234 8-26-2020 0
2 1235 8-24-2020 0
3 1235 9-3-2020 1
4 1236 9-1-2020 0
谢谢,这起作用了。不幸的是,我的最后一个新专栏中的一些id与df2中的id不匹配。我要进一步挖掘我可能错过的东西