pandas 根据使用另一个df的条件更改df列中的值

zd287kbt  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(247)

我有一个如下所示的 Dataframe df1-

|email_id | date |role
|abc@gmail.com | '2022-09-08' |1
|abc@gmail.com | '2022-07-01' |1
|abc@gmail.com | nan |1
|xyz@gmail.com | '2022-04-01' |1
|gmh@gmail.com | nan |1
|ytr@gmail.com | '2022-09-08' |1
|ytr@gmail.com | '2022-09-02' |1

以及df2-

|email_id | status |role
|abc@gmail.com | 1 |1
|xyz@gmail.com | 0 |2
|gmh@gmail.com | 1 |1
|ytr@gmail.com | 1 |2

更新 Dataframe df2status,并检查是否所有记录都存在日期值,则状态应更新为0,否则为1
预期输出-

|email_id | status |role
|abc@gmail.com | 1 |1
|xyz@gmail.com | 0 |2
|gmh@gmail.com | 1 |1
|ytr@gmail.com | 0 |2

预期输出说明-abc@gmail.com有2条记录,第三条记录的填写日期为nan,因此其状态应为1,如果某个电子邮件ID有一条记录,并且填写了日期,则状态应为0,否则,如果单个电子邮件ID的填写日期为nan,则状态应为1,如果同一个电子邮件ID有多条记录,并且填写的日期均应为0,如 www. example.com ,因为不存在NAN。
我试了下面几行代码-

df1 = df1.sort_values(by=["email_id","date"])
df1 = (df1[["email_id","date"]]).reset_index()

但是我不能理解如何在df 1的基础上更新df 2。
任何帮助都将不胜感激。谢谢!

vqlkdk9b

vqlkdk9b1#

可以使用列表解析,如下所示

df2['status'] = [1 if df1[(df1['email_id'] == email_id) & (df1['date'].isna())].shape[0] > 0 else 0 if df1[(df1['email_id'] == email_id) & (df1['date'].notna())].shape[0] > 0 else 1 for email_id in df2['email_id']]

[Out]:

        email_id  status  role
0  abc@gmail.com       1     1
1  xyz@gmail.com       0     2
2  gmh@gmail.com       1     1
3  ytr@gmail.com       0     2

相关问题