有条件地从其他df列创建新列

时间:2020-09-17 19:03:47

标签: python pandas dataframe if-statement

如果要同时在df2的两列中同时满足两个条件,我想在df1中创建一个新的布尔列。例如:

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中的“ True”成为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

但是我得到: “ ValueError:系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”

我已经尝试过:

for row in df:
    if df1['ID'] == df2['ID'] and df1['Date'] == df2['Date']:
        df1['In_store'] = 1
    else: 
        df1['In_store'] = 0

但是我得到: 即使将列重命名为相同的值,“ ValueError:也只能比较标记相同的Series对象”。

我想念什么? 谢谢

1 个答案:

答案 0 :(得分:0)

这本质上是合并:

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