比较两个从两个Excel文件数据框创建的数据,然后基于该数据创建/更新新列

时间:2018-08-16 08:18:23

标签: python excel pandas

我有两个Excel文件A和B。A是主副本,其中有员工姓名和组织名称(NameOrg)的更新记录。文件B包含NameOrg列,且记录较旧,还有许多我们不感兴趣的列。

   Name      Org
0   abc    ddc systems
1   sdc    ddc systems
2   csc    ddd systems
3   rdc    kbf org
4   rfc    kbf org

我要执行以下操作。!

1)对于文件B中的所有现有条目(列NameOrg),我想将文件B与文件A进行比较,创建另外两列('Newemployee'和'Org_change')在文件B中。

    如果我们在文件B中的Newemployee下找不到Name条目,请
  • 用'Y'更新'Name'列。
  • 如果我们注意到“ Org_change”下的组织发生了变化,请
  • 用“新组织名称(根据与工作表A的比较)”更新“ Org”列

截止到现在,我同时拥有两个Dataframe以获取新的员工姓名 但没有获得进一步的线索

full_set = pd.concat([B, A]).drop_duplicates(subset=['Name'])

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

在删除重复项时,您可以选择不保留任何一个副本,这基本上意味着您仅保留唯一值。如果其中一个DataFrame是另一个的严格子集,这将为您提供更新。

diff_set = pd.concat([old, new]).drop_duplicates(subset=['Name'], keep=False)

您的索引似乎匹配得不好。如果遇到此问题,可能需要先设置索引。

diff_set = pd.concat([old.set_index("Org"), new.set_index("Org")]).drop_duplicates(subset=['Name'], keep=False).reset_index(drop=False)

最后一个reset_index只是要还原为索引只是枚举计数器的格式。

编辑:

ll
Out[101]: 
  Name          Org
0  abc  ddc systems
1  sdc  ddc systems
2  csc  ddd systems
3  rdc      kbf org
4  rfc      kbf org

ll2
Out[102]: 
   Name          Org
0   abc  ddc systems
1   sdc  ddc systems
2   csc  ddd systems
3   rdc      kbf org
4   rfc      kbf org
5  Spam  ddc systems
6  John  ddc systems
7   Foo  ddd systems

diff_set = pd.concat([ll.set_index("Org"), ll2.set_index("Org")]).drop_duplicates(subset=['Name'], keep=False).reset_index(drop=False)

diff_set
Out[104]: 
           Org  Name
0  ddc systems  Spam
1  ddc systems  John
2  ddd systems   Foo

我可以添加任意数量的员工,并且可以继续工作。 ^^

相关问题