我有一个示例数据框 df1
id user_id name email
1 1 John John@example.com
2 2 Alves alves@example.com
3 3 Kristein kristein@example.com
4 4 James james@example.com
第二个数据框 df2
id user user_email_1 user_email_2 status
1 Sanders sanders@example.com active
2 Alves alves111@example.com alves@example.com active
3 Micheal micheal@example.com active
4 James james@example.com delete
如何将状态数据从 df2
添加到 df1
if
user_id
of df1
和 id
of df2
name
of df1
和 user
of df2
email
of df1
与 user_email_1
或 user_email_2
of df2
匹配并删除不匹配的记录?
预期结果df1
:
id user_id name email status
2 2 Alves alves@example.com active
4 4 James james@example.com delete
例如:
当 alves@example.com
中的 df1
与 user_email_2
匹配时,它附加了状态数据。
答案 0 :(得分:-1)
你应该使用 merge
df1.merge(df2.reset_index(), how='inner', left_on=['name', 'email', 'id'], right_on=['user', 'user_email', 'index'])
答案 1 :(得分:-1)
重新排列您的数据框 df2
以仅获得一个 user_email
列,然后合并两个数据框并保留所需的列:
df2 = df2.set_index(['id', 'user', 'status']).stack() \
.rename('user_email').reset_index()
out = pd.merge(df1, df2, left_on=['user_id', 'name', 'email'],
right_on=['id', 'user', 'user_email'],
suffixes=('', '2')) \
[['id', 'user_id', 'name', 'email', 'status']]
>>> out
id user_id name email status
0 2 2 Alves alves@example.com active
1 4 4 James james@example.com delete
<块引用>
在哪里使用 user_email_2 列
user_email_1
和 user_email_2
列堆叠为一列。转换后,df2
看起来像:
>>> df2
id user status level_3 user_email
0 1 Sanders active user_email_1 sanders@example.com
1 2 Alves active user_email_1 alves111@example.com
2 2 Alves active user_email_2 alves@example.com
3 3 Micheal active user_email_1 micheal@example.com
4 4 James delete user_email_1 james@example.com