Python 基于另一个df中的值在新df列中填充值

Python 基于另一个df中的值在新df列中填充值,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: 第一: 第二: Empty = {'Name': ["Ron", "Ron", "Ron", "Ron", "Joe", "Joe", "Joe", "Joe", "Dan", "Dan", "Dan", "Dan"], 'Y

我有两个数据帧: 第一:

第二:

Empty = {'Name': ["Ron", "Ron", "Ron", "Ron", "Joe", "Joe", "Joe", "Joe", "Dan", "Dan", "Dan", "Dan"],
        'Year': [1998, 1999, 2000, 2001, 1998, 1999, 2000, 2001, 1998, 1999, 2000, 2001]
        }

df2 = pd.DataFrame(Empty, columns = ['Name', 'Year'])

    Name Year
0   Ron 1998
1   Ron 1999
2   Ron 2000
3   Ron 2001
4   Joe 1998
5   Joe 1999
6   Joe 2000
7   Joe 2001
8   Dan 1998
9   Dan 1999
10  Dan 2000
11  Dan 2001
我想在df2中添加一列(我们称之为“job_status”),其中与df1中的名称相关联的每年将在df2中接收1,否则将接收0。这应该是输出:

   Name  Year   job_status
0   Ron 1998      0
1   Ron 1999      0
2   Ron 2000      1
3   Ron 2001      1
4   Joe 1998      1
5   Joe 1999      0
6   Joe 2000      0
7   Joe 2001      0
8   Dan 1998      0
9   Dan 1999      1
10  Dan 2000      1
11  Dan 2001      0

如何实现这一点?

首先
Job
上分解
数据帧
df
,然后将其与
df2
左合并,最后使用
系列。notna
+
视图
将标签从
[0,1]
分配到
作业状态

d = df2.merge(df.explode('Job'), left_on=['Name', 'Year'], right_on=['Name', 'Job'], how='left')
d['job_status'] = d.pop('Job').notna().view('i1')
结果:

print(d)

   Name  Year  job_status
0   Ron  1998           0
1   Ron  1999           0
2   Ron  2000           1
3   Ron  2001           1
4   Joe  1998           1
5   Joe  1999           0
6   Joe  2000           0
7   Joe  2001           0
8   Dan  1998           0
9   Dan  1999           1
10  Dan  2000           1
11  Dan  2001           0

首先
分解
作业上的数据帧
df
,然后将其与
df2
左合并,最后使用
系列。notna
+
视图
将标签从
[0,1]
分配到
作业状态

d = df2.merge(df.explode('Job'), left_on=['Name', 'Year'], right_on=['Name', 'Job'], how='left')
d['job_status'] = d.pop('Job').notna().view('i1')
结果:

print(d)

   Name  Year  job_status
0   Ron  1998           0
1   Ron  1999           0
2   Ron  2000           1
3   Ron  2001           1
4   Joe  1998           1
5   Joe  1999           0
6   Joe  2000           0
7   Joe  2001           0
8   Dan  1998           0
9   Dan  1999           1
10  Dan  2000           1
11  Dan  2001           0

在这里寻找你的答案:在这里寻找你的答案:@pyassign67这是否回答了你的问题?看看@pyassign67,这是否回答了您的问题?看看