繁体   English   中英

比较两个数据帧并将数据附加到 python pandas 中

[英]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_iddf2 id

df1 namedf2 user

df1 emailuser_email_1df2 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.comuser_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM