[英]compare two dataframes and append the data in python pandas
我有一个示例数据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
df1
user_id
和df2
id
df1
name
和df2
user
df1
email
与user_email_1
或df2
user_email_2
匹配并删除不匹配的记录?
预期结果df1
:
id user_id name email status
2 2 Alves alves@example.com active
4 4 James james@example.com delete
例如:
由于来自df1
alves@example.com
与user_email_2
匹配,因此它附加了状态数据。
你应该使用合并
df1.merge(df2.reset_index(), how='inner', left_on=['name', 'email', 'id'], right_on=['user', 'user_email', 'index'])
重新排列数据user_email
df2
以仅获取一个user_email
列,然后合并两个数据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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.